三国志

时间限制:3000 ms  |  内存限制:65535 KB
难度:5 
描述

《三国志》是一款很经典的经营策略类游戏。我们的小白同学是这款游戏的忠实玩家。现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中有很多不同数量的同种财宝。我们的小白同学虎视眈眈的看着这些城池中的财宝。

按照游戏的规则,他只要指派一名武将攻占这座城池,里面的财宝就归他所有了。不过一量攻占这座城池,我们的武将就要留守,不能撤回。因为我们的小白手下有无数的武将,所以他不在乎这些。

从小白的城池派出的武将,每走一公理的距离就要消耗一石的粮食,而他手上的粮食是有限的。现在小白统计出了地图上城池间的道路,这些道路都是双向的,他想请你帮忙计算出他能得到 的最多的财宝数量。我们用城池的编号代表城池,规定小白所在的城池为0号城池,其他的城池从1号开始计数。

 
输入
本题包含多组数据:
首先,是一个整数T(1<=T<=20),代表数据的组数
然后,下面是T组测试数据。对于每组数据包含三行:
第一行:三个数字S,N,M
(1<=S<=1000000,1<=N<=100,1<=M<=10000)
S代表他手中的粮食(石),N代表城池个数,M代表道路条数。
第二行:包含M个三元组行 Ai,Bi,Ci(1<=A,B<=N,1<=C<=100)。
代表Ai,Bi两城池间的道路长度为Ci(公里)。
第三行:包含N个元素,Vi代表第i个城池中的财宝数量。(1<=V<=100)
输出
每组输出各占一行,输出仅一个整数,表示小白能得到的最大财富值。
样例输入
  1. 2
  2. 10 1 1
  3. 0 1 3
  4. 2
  5. 5 2 3
  6. 0 1 2 0 2 4 1 2 1
  7. 2 3
样例输出
  1. 2
  2. 5
来源
郑州大学校赛题目
上传者
张云聪
简单的 狄斯喹诺算法+0/1背包
代码:
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. using namespace std;
  6. const int inf=0x3f3f3f3f ;
  7. int cost[][],lowc[],path[];
  8. bool vis[];
  9. int dp[],value[]; //状态压缩以及路径压缩
  10. void Dijkstra( int n , int st )
  11. {
  12. int i,j,minc;
  13. memset(vis,,sizeof(vis));
  14. vis[st]=;
  15. for(i=;i<=n;i++)
  16. {
  17. lowc[i]=cost[st][i];
  18. path[i]=st;
  19. }
  20. lowc[st]=;
  21. path[st]=-; //root
  22. int pre=st;
  23. for(i=;i<=n;i++)
  24. {
  25. minc=inf;
  26. for(j=;j<=n;j++)
  27. {
  28. if(==vis[j]&&lowc[pre]+cost[pre][j]<lowc[j])
  29. {
  30. lowc[j]=lowc[pre]+cost[pre][j];
  31. path[j]=pre;
  32. }
  33. }
  34. for(j=;j<=n;j++)
  35. if(==vis[j]&&lowc[j]<minc)
  36. {
  37. minc=lowc[j];
  38. pre=j;
  39. }
  40. vis[pre]=;
  41. }
  42. }
  43.  
  44. int main()
  45. {
  46. int test,n,m,s,i,j;
  47. int a,b,c;
  48. //freopen("test.in","r",stdin);
  49. scanf("%d",&test);
  50. while(test--)
  51. {
  52. scanf("%d%d%d",&s,&n,&m);
  53. for(i=;i<=n;i++)
  54. {
  55. for(j=;j<=n;j++)
  56. {
  57. cost[i][j]=inf;
  58. }
  59. }
  60. for(i=;i<m;i++){
  61. scanf("%d%d%d",&a,&b,&c);
  62. cost[a][b]=cost[b][a]=c;
  63. }
  64. for(i=;i<=n;i++)
  65. scanf("%d",&value[i]);
  66. Dijkstra(n,);
  67. //得到0到其他城市的最短路,然后进行0/1背包
  68. memset(dp,,sizeof(int)*(s+));
  69. for(i=;i<=n;i++)
  70. {
  71. for(j=s;j>=lowc[i];j--)
  72. {
  73. if(dp[j]<dp[j-lowc[i]]+value[i])
  74. dp[j]=dp[j-lowc[i]]+value[i];
  75. }
  76. }
  77. printf("%d\n",dp[s]);
  78. }
  79. return ;
  80. }

nyoj------203三国志的更多相关文章

  1. nyoj 203 三国志 dijkstra+01背包

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=203 思路:先求点0到每个点的最短距离,dijkstra算法,然后就是01背包了 我奇怪的 ...

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

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

  3. NYOJ 203 三国志

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

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

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

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

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

  6. FC游戏 《三国志2-霸王的大陆》攻略

    <三国志2-霸王的大陆>是日本南梦宫公司研发的一款历史战略模拟游戏,于1992年06月10日在红白机平台上发行. 在开始游戏选择君主时(一定要在君主未出现前的画面时进行第二步),按住1P的 ...

  7. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  8. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  9. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

  10. Acadia Lab 203 + Lab 231

    在做完 Lab 6 之后,惊觉选做实验缺口很大,于是遍历了一遍夏任务,找到了一条最省力的路线. 做完 Lab 6 的连线不用拆,可以接下来做以下两个实验: Lab 203 网络时钟 核心代码如下: v ...

随机推荐

  1. hashcat

    作者: 官网:https://hashcat.net/oclhashcat/ 功能:hash破解

  2. ABAP RFC远程调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. SQL Group By/Having

    有时候需要检查DataBase里面是不是存在重复的数据,那么比较常用的就是通过Group By来进行分组,然后Having出来,如下: ))

  4. Codeforces Round #249 (Div. 2)B(贪心法)

    B. Pasha Maximizes time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  5. FJNU 1155 Fat Brother’s prediction(胖哥的预言)

    FJNU 1155 Fat Brother’s prediction(胖哥的预言) Time Limit: 1000MS   Memory Limit: 257792K [Description] [ ...

  6. iOS - OC NSProcessInfo 系统进程信息

    前言 @interface NSProcessInfo : NSObject NSProcessInfo 类中包含一些方法,允许你设置或检索正在运行的应用程序(即进程)的各种类型的信息. 1.获取系统 ...

  7. bootstrap 固定定位

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>Boo ...

  8. Python学习(8)字符串

    目录 Python 字符串 Python 访问字符串中的值 Python 字符串更新 Python 转义字符 Python 字符串运算符 Python 字符串格式化 Python 三引号 Unicod ...

  9. mysql 执行计划的理解

    1.执行计划就是在sql语句之前加上explain,使用desc 也可以.2.desc有两个选项extended和partitions,desc extended 将原sql语句进行优化,通过show ...

  10. mysql 编码测试

    insert into t1(v1) values('cn中国'); select * from t1; 1.输入gbk,交互latin1,数据库latin1 insert,客户端把gbk的输入当成l ...