1919: 三国志

时间限制: 3 Sec  内存限制: 64 MB
提交: 15  解决: 8
您该题的状态:已完成
[提交][状态][讨论版]

题目描述

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

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

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

输出

每组输出各占一行,输出仅一个整数,表示小白能得到的最大财富值。

样例输入

2
10 1 1
0 1 3
2
5 2 3
0 1 2 0 2 4 1 2 1
2 3

样例输出

2
5

贼坑的一道题。。。。看了好久总算AC了,,感觉心里凉凉的╥﹏╥

话不多说,看思路吧(~ ̄▽ ̄)~

首先这是一个很明显的求最短路径的问题,但是如果你认为这只是个最短路径。。图样图森破

从题中我们可以发现,小白要想得到财宝,就得找到每个城市到小白所在0号城市的最短路径(因为路程越短话费越少嘛,所以当然选近的啦),然后,,就变成了一个动归01背包问题:知道每个有财宝的城市离你的距离(花费的粮食与距离成正比,于是花费也知道了),你一共有s石粮食,然后得取得最大数量的财宝ヾ(✿゚▽゚)ノ破费科特(是不是好理解了许多?)思路说完了,直接上代码↓↓↓

#include <stdio.h>
#include <string.h>
#define MAXN 105
#define INF 0x3f3f3f3fbool vis[MAXN];           //Dijkstra算法标记数组
int dis[MAXN];          //存储每个有财宝的城市到0号城市的最短距离
int val[MAXN];          //存储每个有财宝的城市的财宝数量
int dp[1000010];        //dp数组 大小为粮食总量
int map[MAXN][MAXN];    //记录各城市之间的连通关系 //Dijkstra算法求出1~n-1号中有财宝的城市离0号城市的最短距离
void Dij( int n ){memset( vis,false,sizeof(vis) );vis[0] = true;for( int i=0 ; i<=n ; i++ )dis[i] = map[0][i];for( int i=1 ; i<n ; i++ ){int min = INF;int pos = 0;for( int j=0 ; j<=n ; j++ ){if( !vis[j] && min>dis[j] )min = dis[ pos=j ];}vis[pos] = true;for( int j=0 ; j<=n ; j++ ){if( !vis[j] && map[pos][j]!=INF && dis[j]>dis[pos]+map[pos][j] )dis[j] = dis[pos] + map[pos][j];}}
}//dp求能获得的最大财宝数
void getDp( int n , int fsum ){for( int i=1 ; i<=n ; i++ ){for( int j=fsum ; j>=dis[i] ; j-- ){if( dp[j] < dp[ j-dis[i] ] + val[i] )dp[j] = dp[ j-dis[i] ] + val[i];}}
}int main(){int t;int s,n,m;scanf( "%d",&t );while( t-- ){scanf( "%d%d%d",&s,&n,&m );memset( map,INF,sizeof(map) );memset( dp,0,sizeof(dp) );int a,b,c;for( int i=0 ; i<m ; i++ ){scanf( "%d%d%d",&a,&b,&c );//可能存在多条道路,选最短的那条,,这里wa了好几次 if( map[a][b]>c )map[a][b] = map[b][a] = c;}for( int i=1 ; i<=n ; i++ )scanf( "%d",&val[i] );Dij( n );getDp( n,s );printf( "%d\n",dp[s] );}
}

有新想法欢迎留言讨论哦(o゚▽゚)o

NYOJ-203 三国志相关推荐

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

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

  2. nyoj 203 三国志

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

  3. nyoj 203 三国志(图论+dp)

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

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

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

  5. xynuoj 1919 三国志

    1919: 三国志 时间限制: 3 Sec  内存限制: 64 MB 提交: 33  解决: 11 题目描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现 ...

  6. 三国志·吴书·贺齐等传

    贺齐字公苗,会稽山阴人也.虞预晋书曰:贺氏本姓庆氏.齐伯父纯,儒学有重名,汉安帝时为侍中.江夏太守,去官,与江夏黄琼.(汉中)[广汉]杨厚俱公车徵.避安帝父孝德皇(帝)讳,改为贺氏.齐父辅,永宁长.少 ...

  7. 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...

    兵符系统中不同颜色的兵符给角色助阵的属性值都不相同,红色兵符.金色兵符.暗金兵符,今天我们就来看一下几种暗金兵符的技能都是怎样的吧. [鸿蒙符] 鸿蒙符的混沌破势技能,使得佩戴的武将能在一定条件下驱散 ...

  8. nyoj------203三国志

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

  9. NYOJ 30 Gone Fishing JAVA+解析

    Gone Fishing这道题目运用的多次折合成一次这种思想我首次见,我想的一个思路是,每次算一下鱼量和时间代价比,这个代码我没有敲,下面的代码是一位仁兄敲得,我研读了一下,做了一个注释,应该有利于后 ...

  10. 纯数学教程 Page 203 例XLI (6)

    如果$ax^2+2bx+c$有一个二重根,也即它有$a(x-\alpha)^2$的形式,那么$2ax+2b$必定可以被$x-\alpha$整除,所以有$\alpha=\frac{-b}{a}$.而且有 ...

最新文章

  1. php mysql安装位置_安装php时,--with-mysql指定的是哪个路径呢?
  2. OpenStack如何实现高可用集群介绍
  3. 手机屏幕的物理分辨率和逻辑分辨率
  4. question regarding UI configuration type
  5. Unity3D实践系列03,使用Visual Studio编写脚本与调试
  6. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
  7. 本地Android源代码库下载源码
  8. Shell 中各种括号的作用
  9. [转载]手工安全测试方法修改建议
  10. nodejs实践录:使用curl测试post请求
  11. VR线下体验店群雄并起,超级队长为何能靠IP突围?
  12. CAD2008中常用快捷命令
  13. OC学习笔记之011IOS应用开发入门--控件2进度条、拖动条、警告框、日期选择器、选择器
  14. DECOUPLED WEIGHT DECAY REGULARIZATION
  15. N-MOS电平转换电路分析
  16. 数据可视化笔记8 层次数据可视化
  17. OneDrive不能上了?DNS被污染,解决方法很简单
  18. (文末福利)让工具成为双手的延伸
  19. android代码精华 各路大神写的代码精华,大家一起分享
  20. 写有用的东西,不要灌水

热门文章

  1. 新东方 计算机英语,计算机应用常用英语: Internet 术语表
  2. 2.16 这些都是我常用的修图工具【玩赚小红书】
  3. python中拼接路径os.path.join的坑
  4. ChinaSys十周年感想
  5. java 键盘鼠标交互_人机交互多样性-7种不需要鼠标和键盘的设备
  6. 使用Python获取春节档电影影评,制作可视化词云图
  7. Mybatis中的Criteria条件查询
  8. tinyXml生成XML文件
  9. JavaScript高级(详细总结)
  10. 数字信号处理--几种常见的数字滤波器实现原理