nyoj 203 三国志 dijkstra+01背包
题目链接: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背包的更多相关文章
- Nyoj 三国志(dijkstra+01背包)
描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中 ...
- NYOJ 203 三国志(Dijkstra+贪心)
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 <三国志>是一款非常经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.如今他把游戏简化一下 ...
- nyoj 203 三国志(最短路加01背包)
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- hdu3339 In Action(Dijkstra+01背包)
/* 题意:有 n 个站点(编号1...n),每一个站点都有一个能量值,为了不让这些能量值连接起来,要用 坦克占领这个站点!已知站点的 之间的距离,每个坦克从0点出发到某一个站点,1 unit dis ...
- NYOJ 203 三国志
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- HDU-3339 IN ACTION(Dijkstra +01背包)
Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...
- [NYOJ 860] 又见01背包
又见01背包 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W 的物品,求所 ...
- NYOJ 289 苹果(01背包)
苹果 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. ...
- nyoj 1091 还是01背包(超大数dp)
nyoj 1091 还是01背包 描述 有n个重量和价值分别为 wi 和 vi 的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值 1 <= n <=40 1 ...
随机推荐
- ASP.NET MVC5---通过QueryString传值
1.首先我们来看看普通的传值是啥样的.如图所示,我们普通的传值是这样的 public ActionResult Edit(int?id) { if (id == null) { return new ...
- ubuntu E: Could not get lock /var/lib/dpkg/lock - open
sudo rm /var/lib/apt/lists/lock apt-get update
- 【Android】将Xamarin For VS升级为4.1.0.530版
分类:C#.Android.VS2015(自带Update2).Win10 创建日期:2016-06-10 2016-08-03说明:该版本已过时,新版本详见本博客置顶的更新. 一.Xamarin f ...
- 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能
[源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows ...
- sql: sq_helptext
--查看表生成脚本 sql server --- '\r'是回车,'\n'是换行 /t相当于键盘的Tab键 --- 操作系统的不同,换行符操也不同:/r Mac /n Unix/Lin ...
- 基于Eclipse的Go语言可视化开发环境
http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新: ...
- http get post
使用java代码模拟http请求 package ftp; import java.io.BufferedReader; import java.io.IOException; import java ...
- oracle client ORA-12541: TNS: 无监听程序
1. Question description: if you are setting the oracle client to add a local network service, you m ...
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...
- 关于领域驱动设计(DDD)仓储的思考
为什么需要仓储呢?领域对象(一般是聚合根)的被创建出来后的到最后持久化到数据库都需要跟数据库打交道,这样我们就需要一个类似数据库访问层的东西来管理领域对象.那是不是我们就可以设计一个类似DAL层的东东 ...