HDU3339 In Action 【最短路】+【01背包】
<题目链接>
题目大意:
给出一个0~n组成的图,1~n的点上分布着值为pow的电站,给出图的m条边以及距离,从0出发到n个点中的x个点的行走距离和最小(因为是每炸一个点派出一辆坦克),且x个点的pow之和必须超过总的pow和的一半。
解题分析:
由于本题数据范围很小,只有100,所以我们能够用floyed算出0到任意一点的最短距离,然后将所有0可达的点看成物品,0到它们的最短距离看成体积,这样将所有可达物品最短距离之和看成背包容量,这些可达点的pow看成价值,然后再用01背包。dp[i]表示在总共走i距离的情况下,所能获得的最大价值。所以,在用01背包计算dp[1~sumvol]的所有值后,我们就可以遍历总共走过的距离i,当dp[i]恰好大于总价值一半的时候,此时的i就是总共的最短距离。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define ll long long
const int INF=0x3f3f3f3f;
int n,m;
int mpa[][];
int val[],vol[];
const int maxn=+;
int dp[maxn]; void floyed(){ //floyed计算0到各点的最短路
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
for(int k=;k<=n;k++){
if(mpa[j][k]>mpa[j][i]+mpa[i][k]){
mpa[j][k]=mpa[j][i]+mpa[i][k];
}
}
}
}
} int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&m); for(int i=;i<=n;i++){ //mpa[][]数组初始化
for(int j=;j<=n;j++){
if(i==j)mpa[i][j]=;
else mpa[i][j]=INF;
}
} for(int i=;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(c<mpa[a][b]){ //去重边
mpa[a][b]=mpa[b][a]=c;
}
}
int sumval=; //所有点的总价值
for(int i=;i<=n;i++){
scanf("%d",&val[i]);
sumval+=val[i];
} floyed();
int sumvol=; //0到所有可达点的最短距离之和,作为01背包的容量
for(int i=;i<=n;i++){
if(mpa[][i]!=INF)sumvol+=mpa[][i];
vol[i]=mpa[][i]; //把这段距离看成物品的体积
} memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=sumvol;j>=vol[i];j--){
dp[j]=max(dp[j],dp[j-vol[i]]+val[i]); //dp[j]表示在总距离为j的情况下所能得到的最大价值
}
}
int ans=-INF;
for(int i=;i<=sumvol;i++){
if(dp[i]>(sumval/)){ //当dp[i]的值大于sum/2时,此时的i就是符合条件的最短距离
ans=i;
break;
}
}
if(ans==-INF)printf("impossible\n");
else printf("%d\n",ans);
}
return ;
}
2018-09-04
HDU3339 In Action 【最短路】+【01背包】的更多相关文章
- HDU-3339 IN ACTION(Dijkstra +01背包)
Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...
- HDU 3339 In Action 最短路+01背包
题目链接: 题目 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu3339In Action(最短路+01背包)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/H Description Since 1945, whe ...
- HDU 3339 In Action【最短路+01背包】
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3339] In Action Time Limit: 2000/1000 MS (Java/Other ...
- HDU 3339 In Action【最短路+01背包模板/主要是建模看谁是容量、价值】
Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the n ...
- *HDU3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- In Action(最短路+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdoj--3339--In Action(最短路+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 3339 In Action (最短路径+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- 用C#开发基于自动化接口的OPC客户端
OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁.OPC作为一 ...
- ORA-00845 MEMORY_TARGET not supported on this system 的解决
本文来源:宁静致远 的<ORA-00845 MEMORY_TARGET not supported on this system 的解决> oracle11g数据库在执行dbca或者调整s ...
- Confluence 6 Microsoft SQL Server 设置准备
在开始前,请检查: 请查看 Supported Platforms 页面来获得 Confluence 系统支持的 SQL Server 数据库版本.你需要在安装 Confluence 之前升级你的 O ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- 【python】json中字典key不可为数值型
遇到了一个很诡异的错误.写一个字典,存入json文件.之后读出判断是否存在key.结果惊奇的发现,同一个key居然存在两次. 原因:json会将数值key转换为unicode 结论:使用json时字典 ...
- JSP 动作
动作是第三种类型的语法元素,它们被转换成Java 代码来执行操作,如访问一个Java对象或调用方法. 一. useBean useBean将创建一个关联Java对象的脚本变量.这 是早期分离的表示层和 ...
- laravel 注入那点事
public function delete(Group $groupId, Post $postId) { $postId->delete(); return response()->j ...
- Python知乎热门话题数据的爬取实战
import requestsfrom pyquery import PyQuery as pq url = 'https://www.zhihu.com/explore'headers = { 'u ...
- 【第一部分】10Leetcode刷题
一.删除链表的倒数第N个节点 题目:19. Remove Nth Node From End of List 分析:典型的利用双指针法解题.首先让指针first指向头节点,然后让其向后移动n步,接着让 ...
- Caused by: java.net.ConnectException: Connection refused/Caused by: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
1.使用sqoop技术将mysql的数据导入到Hive出现的错误如下所示: 第一次使用命令如下所示: [hadoop@slaver1 sqoop--cdh5.3.6]$ bin/sqoop impor ...