NYOJ 203 三国志(Dijkstra+贪心)
三国志
- 描写叙述
-
《三国志》是一款非常经典的经营策略类游戏。我们的小白同学是这款游戏的忠实玩家。如今他把游戏简化一下,地图上仅仅有他一方势力,如今他仅仅有一个城池,而他周边有一些无人占的空城,可是这些空城中有非常多不同数量的同种財宝。
我们的小白同学虎视眈眈的看着这些城池中的財宝。
依照游戏的规则。他仅仅要指派一名武将攻占这座城池,里面的財宝就归他全部了。只是一量攻占这座城池,我们的武将就要留守。不能撤回。由于我们的小白手下有无数的武将,所以他不在乎这些。
从小白的城池派出的武将,每走一公理的距离就要消耗一石的粮食,而他手上的粮食是有限的。如今小白统计出了地图上城池间的道路,这些道路都是双向的。他想请你帮忙计算出他能得到 的最多的財宝数量。我们用城池的编号代表城池,规定小白所在的城池为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 -
Dijkstra+贪心算法!
-
AC码:
-
#include<stdio.h>
#include<string.h>
#define INF 99999999
int G[105][105],visit[105],num[105];
int dist[105],dp[1000005];
int max(int a,int b)
{
return a>b? a:b;
}
int main()
{
int T,s,n,m,a,b,c,min,i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&s,&n,&m);
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
G[i][j]=INF;
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(G[a][b]>c) // WA了非常多次,不知道为什么要加这个推断条件
G[a][b]=G[b][a]=c; // 创建邻接矩阵
}
for(i=1;i<=n;i++)
scanf("%d",&num[i]); // 每一个城市的財富值 // Dijkstra算法求随意两点间的最短路径
memset(visit,0,sizeof(visit));
for(i=0;i<=n;i++)
dist[i]=G[0][i];
dist[0]=0;
visit[0]=1;
for(i=1;i<=n;i++)
{
min=INF;
k=0;
for(j=0;j<=n;j++)
{
if(!visit[j]&&min>dist[j])
{
min=dist[j];
k=j;
}
}
visit[k]=1;
for(j=0;j<=n;j++)
{
if(!visit[j]&&dist[j]>dist[k]+G[k][j])
dist[j]=dist[k]+G[k][j];
}
}// 最短路径求解完成 // 贪心算法求得最大財富值
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=s;j>=dist[i];j--)
{
dp[j]=max(dp[j],dp[j-dist[i]]+num[i]);
}
}
printf("%d\n",dp[s]);
}
return 0;
}
NYOJ 203 三国志(Dijkstra+贪心)的更多相关文章
- nyoj 203 三国志 dijkstra+01背包
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=203 思路:先求点0到每个点的最短距离,dijkstra算法,然后就是01背包了 我奇怪的 ...
- nyoj 203 三国志(最短路加01背包)
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- NYOJ 203 三国志
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- Nyoj 三国志(dijkstra+01背包)
描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中 ...
- [nyoj]会场安排问题-贪心
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...
- nyoj 16-矩形嵌套(贪心 + 动态规划DP)
16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...
- BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心
Code: #include <queue> #include <cstdio> #include <cstring> #include <algorithm ...
- CCF-交通规划-dijkstra+贪心
交通规划 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成 ...
- nyoj 106背包问题(贪心专题)
背包问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w< ...
随机推荐
- linux中的raid
参考文档 http://www.cnblogs.com/ivictor/p/6099807.html 制作raid5 http://blog.51cto.com/11134648/2103384 RA ...
- Laravel-错误调试与记录日志
Laravel-错误调试与记录日志 标签(空格分隔): php 错误调试 配置 修改/config/app.php 'debug' => env('APP_DEBUG', true), 开启de ...
- 如何启动和关闭MySQL?(四)
分为: 图形化 命令行 方法一:在“计算机”的图标上右键,然后选择“管理”,双击“服务和应用程序”,然后选择“服务”,找到“MySQL”这个服务,然后点击“右键”,就可以进行“停止”和“重新启动”的操 ...
- Oracle 建表
-- Create table create table STUDENT ( sno ) not null, sname ) not null, ssex ) not null, sbirthday ...
- PostgreSQL Replication之第五章 设置同步复制(3)
5.3 冗余和停止复制 谈到同步复制,有一个现象一定不能被遗漏.想象一下,我们有一个同步复制的双节点集群.如果slave故障会发生什么?答案是master不能容易地区分慢slave和故障slave,因 ...
- Oracle 流程控制语句
分为选择语句循环语句两大类:一 选择语句1 if then ...end;set serveroutput on declare var_name1 varchar2(50):='East'; var ...
- CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法
CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法 CentOS 7.4 中, 网卡命名方式发生改变, 可预测功能命名: 网卡简要名称组成格 ...
- Linux系统启动U盘制作工具
1.UNetbootin UNetbootin 让你创建 Ubuntu 或者其他 Linux 发行版的可引导 Live U 盘,而无需烧录 CD. 你既能让 UNetbootin 为你下载众多开箱即用 ...
- Incermental GC
目录 增量式垃圾回收 什么是增量式垃圾回收 三色标记算法 GC 标记清除算法的分割 根查找阶段 标记阶段 写入屏障 清除阶段 分配 优点和缺点 缩短最大暂停时间 降低了吞吐量 Steele 的算法 m ...
- HDU 4917 Permutation 拓扑排序的计数
题意: 一个有n个数的排列,给你一些位置上数字的大小关系.求合法的排列有多少种. 思路: 数字的大小关系可以看做是一条有向边,这样以每个位置当点,就可以把整个排列当做一张有向图.而且题目保证有解,所以 ...