题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=203

思路:先求点0到每个点的最短距离,dijkstra算法,然后就是01背包了

我奇怪的是100*1000000的时间复杂度居然没有超时!

代码如下:

#include "stdio.h"
#include "string.h" #define N 105
#define INF 0x3fffffff bool mark[N];
int dist[N];
int map[N][N];
int dp[1000005]; void Init(int n)
{
for(int i=0; i<=n; ++i)
{
for(int j=0; j<=n; ++j)
map[i][j] = INF;
}
} void dij(int n)
{
int i,j,k;
memset(mark,false,sizeof(mark));
for(i=0; i<=n; ++i)
dist[i] = map[0][i];
mark[0] = true;
int mint;
for(i=1; i<=n; ++i)
{
k = 0;
mint = INF;
for(j=0; j<=n; ++j)
{
if(!mark[j] && mint>dist[j])
{
mint = dist[j];
k = j;
}
}
mark[k] = true;
for(j=0; j<=n; ++j)
{
if(!mark[j] && dist[j]>dist[k]+map[k][j])
dist[j] = dist[k]+map[k][j];
}
}
} int value[N]; int main()
{
int T;
int n,sum,m;
int i,j;
int x,y,k;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d",&sum,&n,&m);
Init(n);
while(m--)
{
scanf("%d %d %d",&x,&y,&k);
if(k<map[x][y])
map[x][y] = map[y][x] = k;
}
for(i=1; i<=n; ++i)
scanf("%d",&value[i]);
dij(n);
memset(dp,0,sizeof(dp));
for(i=1; i<=n; ++i) //01背包
{
for(j=sum; j>=dist[i]; j--)
{
if(dp[j] < dp[j-dist[i]] + value[i])
dp[j] = dp[j-dist[i]]+value[i];
}
}
int ans = 0;
for(i=1; i<=sum; ++i)
ans = ans>dp[i]?ans:dp[i];
printf("%d\n",ans);
}
return 0;
}



nyoj 203 三国志 dijkstra+01背包的更多相关文章

  1. Nyoj 三国志(dijkstra+01背包)

    描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中 ...

  2. NYOJ 203 三国志(Dijkstra+贪心)

    三国志 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 <三国志>是一款非常经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.如今他把游戏简化一下 ...

  3. nyoj 203 三国志(最短路加01背包)

    三国志 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...

  4. hdu3339 In Action(Dijkstra+01背包)

    /* 题意:有 n 个站点(编号1...n),每一个站点都有一个能量值,为了不让这些能量值连接起来,要用 坦克占领这个站点!已知站点的 之间的距离,每个坦克从0点出发到某一个站点,1 unit dis ...

  5. NYOJ 203 三国志

    三国志 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...

  6. HDU-3339 IN ACTION(Dijkstra +01背包)

      Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...

  7. [NYOJ 860] 又见01背包

    又见01背包 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述     有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W  的物品,求所 ...

  8. NYOJ 289 苹果(01背包)

    苹果 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. ...

  9. nyoj 1091 还是01背包(超大数dp)

    nyoj 1091 还是01背包 描述 有n个重量和价值分别为 wi 和 vi 的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值 1 <= n <=40 1 ...

随机推荐

  1. Orleans之Hello World

    接触Orleans 有一段时间了,之前也翻译了一系列官网文档,今天我们就来一个实际的例子,来看看到底如何用这个东西来开发项目,当然经典的也是醉人的,我们就从HelloWorld开始吧. 通过前面的知识 ...

  2. JS代码放置位置、变量与数据类型、运算符与逻辑表达运算符

    内容简要: 1.JS代码放置位置的问题: 2.变量与数据类型: 3.运算符与逻辑表达式的运算符   我的位置 全局问题:为何在网页推荐位置(一般在<head></head>内部 ...

  3. SQL Server中@@ROWCOUNT的用法

    SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...

  4. PDT已有很大改进

    受够了NB的低性能文件扫描,也许是时候放弃Netbeans迎接PDT了.

  5. [译]PrestaShop开发者指南 第一篇 基础

    # 第一篇 基础 PS(PrestaShop简称)一开始就设定了能够在它的基础上很简单的构建第三方模块的机制,让它成为一款具有极高定制性的电子商务软件. PS的可以在三个方面进行定制: * 主题 * ...

  6. tomcat+webservice实现简单的web服务远程调用接口

    1,准备工作:    ①需要使用到jaxws的一系列架包,网址:http://jax-ws.java.net,我下的是比较新的一个版本(下载好以后吧架包发在lib下),②webservice的一个工具 ...

  7. inotify--内核中文件系统的通知机制

    转载:http://www.ibm.com/developerworks/cn/linux/l-inotifynew/index.html 一. 引言 众所周知,Linux 桌面系统与 MAC 或 W ...

  8. js 倒计时 跳转

    1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code ...

  9. Mybatis Physical Pagination

    1. Requirements: when we use the sql like "select * from targetTable", we get all records ...

  10. redis 慢日志 slowlog

    1 slowlog是什么 redis的slowlog是redis用于记录记录慢查询执行时间的日志系统.由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性 ...