三国志

时间限制: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)

输出
每组输出各占一行。输出仅一个整数,表示小白能得到的最大財富值。
例子输入
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+贪心)的更多相关文章

  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 三国志(dijkstra+01背包)

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

  5. [nyoj]会场安排问题-贪心

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...

  6. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

  7. BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心

    Code: #include <queue> #include <cstdio> #include <cstring> #include <algorithm ...

  8. CCF-交通规划-dijkstra+贪心

    交通规划 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成 ...

  9. nyoj 106背包问题(贪心专题)

    背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w< ...

随机推荐

  1. zookeeper的理解与概述

    文章转自https://www.cnblogs.com/likehua/p/3999600.html  感谢博主 文章转自:http://www.aboutyun.com/thread-9266-1- ...

  2. 11.string容器

    #include <iostream> //string的本质也是容器 #include <string> #include <cstdlib> using nam ...

  3. Kali linux 2016.2(Rolling)里Metasploit的常用模块

    端口扫描 auxiliary/scanner/portscanscanner/portscan/ack ACK防火墙扫描scanner/portscan/ftpbounce FTP跳端口扫描scann ...

  4. CUDA笔记(11)

    CUDA提供了一种cudaEvent_t的类型,这种类型Event可以统计GPU上面某一个任务或者代码段的精确运行时间 使用常量内存的光线跟踪器的性能比使用全局内存的性能提升了50% __consta ...

  5. #p-complete原来比np更难

    转载一下豆瓣的一个不知名的朋友的介绍: NP是指多项式时间内验证其解是否正确.比如: 我们给一个0-1背包的解,就可以在多项式时间内验证是否满足条件.至于是否能找到 满足条件的解,这在NP复杂度里没有 ...

  6. UI Framework-1: Aura

    Aura (obsolete) This document is still good for a high level overview, with contact information, but ...

  7. github下载速度慢解决方法

    1.获取 global.ssl.fastly地址 访问 http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo 获取cdn域名以及ip地址  ...

  8. python(2) 图像通道,几何变换,裁剪

    一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

  9. [洛谷P1726][codevs1332]上白泽慧音

    题目大意:求一个有向图的最大强连通分量中点的个数,并输出这些点(字典序最小). 解题思路:裸的强连通分量. 数据小,求完强连通分量后排序+vector大小比较即可(vector有小于运算符). C++ ...

  10. Linux 中挂载 ISO 文件

    在 Linux 中挂载 ISO 文件 用 mount 命令,在终端中输入如下命令即可: sudo mount -o loop filename.iso /cdrom 其中 filename.iso 是 ...