思路:最短路求出到每个点的最小代价,然后01背包,求出某一代价所能拿到的最大价值,然后搜索最后结果。

代码:

#include<cstdio>
#include<set>
#include<cmath>
#include<stack>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 100+5;
const int INF = 0x3f3f3f3f;
int lowcost[maxn],cost[maxn][maxn];
int dp[10005],power[maxn];
bool vis[maxn];
int n,m;
void Dijkstra(int st){for(int i = 0;i <= n;i++){lowcost[i] = cost[0][i];vis[i] = false;}lowcost[st] = 0;for(int i = 0;i < n;i++){int k = -1,MIN = INF;for(int j = 0;j <= n;j++){if(!vis[j] && lowcost[j] < MIN){MIN = lowcost[j];k = j;}}if(k == -1) break;vis[k] = true;for(int j = 0;j <= n;j++){if(!vis[j] && lowcost[j] > lowcost[k] + cost[k][j]){lowcost[j] = lowcost[k] + cost[k][j];}}}
}
int main(){int T;scanf("%d",&T);while(T--){memset(cost,INF,sizeof(cost));scanf("%d%d",&n,&m);while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);cost[u][v] = cost[v][u] = min(cost[u][v],w);}for(int i = 1;i <= n;i++)scanf("%d",&power[i]);int st = 0;for(int i = 1;i <= n;i++){st += power[i];}st = st / 2 + 1;Dijkstra(0);int ALL = 0;for(int i = 1;i <= n;i++){if(lowcost[i] != INF)ALL += lowcost[i];}memset(dp,0,sizeof(dp));for(int i = 1;i <= n;i++){if(lowcost[i] == INF) continue;for(int j = ALL;j >= lowcost[i];j--){dp[j] = max(dp[j],dp[j - lowcost[i]] + power[i]);}}int Min = -1;for(int i = 0;i <= ALL;i++){if(dp[i] >= st){Min = i;break;}}if(Min != -1) printf("%d\n",Min);else printf("impossible\n");}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/9473532.html

HDU 3339 In Action(最短路+背包)题解相关推荐

  1. HDU 3339 In Action 最短路+01背包

    题目链接: 题目 In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  2. hdu 3339 In Action 背包+flyod

    In Action Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=333 ...

  3. HDU 6071 Lazy Running (最短路)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6071 题解 又是一道虐信心的智商题... 首先有一个辅助问题,这道题转化了一波之后就会化成这个问题: ...

  4. HDU 1114(没有变形的完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/Others ...

  5. hdu 5616 Jam's balance 正反背包+转换

    http://acm.hdu.edu.cn/showproblem.php?pid=5616 思路 题目中蕴含着两种需要计算的重量 1. 从所有的砝码中挑出任意种 2.(转换的思想)在天平的两端都挑出 ...

  6. hdu 5521 Meeting(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...

  7. hdu 6026 Deleting Edges(最短路计数)

    题目链接:hdu 6026 Deleting Edges 题意: 给你n个点,和一个邻接矩阵,非0表示有边,0表示没边. 现在让你删一些边,构成一棵树,使得每个点到0这个点的距离为没删边之前的最短路. ...

  8. hdu 6149 Valley Numer II(01背包套状压dp)

    题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...

  9. hdu(杭电oj)第一页题目题解

    第一页有几题没写,有机会补上(嗯,忘了就是另一回事了). 这个是无聊的时候刷了第一页..存到博客上当做纪念吧.. hdu1000 简单题 难度1 计算a+b的值 hdu1001 简单题 难度1 计算1 ...

  10. HDu 3449 (有依赖的01背包) Consumer

    题意: 有n件物品,对应有不同的价格和价值,这是典型的01背包.但现在有了一个限制,要买物品先买能装这件物品的特定的盒子,盒子的价值为0 代码理解得还不是太好,感觉这是一个"二重" ...

最新文章

  1. Android系列讲座(2):为TextView组件加上边框
  2. 相机定位 | cv paper整理
  3. 英特尔5G基带发布时间提前半年以上,但2019款iPhone支持5G仍有点悬
  4. linq to sql初步
  5. 如何加快Vivado的编译速度
  6. WinServer-AD操作常用powershell命令
  7. ae 创建图像等高线 蒙版_如何用AE创建简单的UI动效
  8. android 同根动画_android 动画系列 (1) - tween 动画(view动画)
  9. 编码风格工作笔记-初步模仿大佬编码风格
  10. 脚本_批量修改md为hexo标准post格式[博]
  11. node 使用 cnpm
  12. QCC3040---读取flash UID
  13. 英特尔核显自定义分辨率_让图像更精彩 英特尔核显如何设置
  14. Python 学习:函数
  15. i春秋:日益增多的企业重要资料外泄
  16. 计算机视觉论文-2021-07-12
  17. 第三章微分中值定理及导数应用(极值)
  18. 爬虫系列 | 1、什么是爬虫,玩爬虫的正确姿势有哪些
  19. 移动端微信、QQ浏览器 web 用 rem 单位适配不生效问题
  20. 【AcWing周赛】AcWing第85场周赛

热门文章

  1. 等待线程3秒返回结果_Excel小白超级讨厌的计算,原来只用3秒就能出结果!
  2. Ubuntu系统 -- 初始化配置与基础操作
  3. 奇异值分解(Singular Value Decomposition, SVD)——快速教程
  4. Vue.js 5 @慕课网
  5. mysql事务和锁 SELECT FOR UPDATE
  6. 最后1天!阿里云双11拼团入官方热荐团直享最低折扣!还有机会瓜分百万现金!...
  7. javaSpring面试题,安排
  8. spring mvc 上传文件
  9. ASP.NET里的路径的使用-预备篇
  10. wpf 开发 -TextBox背景自定义-Decorator