题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走,一个城市只能工作一次,问pp是否能游览n个城市回到城市1.

分析:这个题想到杀怪(Survival(ZOJ 2297状压dp)

那个题,也是钱如果小于0就挂了,最后求剩余的最大钱数,先求出最短路和

Hie with the Pie(POJ 3311状压dp)

送披萨那个题相似。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
#define N 1<<16
#define INF 99999999
const int mod =  1000000007;
int n,m,money,tn;
int dp[N][20],cost[120][120];
struct city{int in,c,d;
}t[20];
void floyd(){for(int k=1;k<=tn;++k)for(int i=1;i<=tn;++i)for(int j=1;j<=tn;++j)cost[i][j]=min(cost[i][j],cost[i][k]+cost[k][j]);
}
void solve(){int cas=(1<<n)-1;for(int i=0;i<=cas;++i)for(int j=0;j<n;++j)dp[i][j]=-INF;for(int i=0;i<n;++i)if(money>=cost[1][t[i].in]+t[i].d)dp[1<<i][i]=money-cost[1][t[i].in]-t[i].d+t[i].c;for(int i=1;i<=cas;++i)for(int j=0;j<n;++j){if(dp[i][j]==-INF||!(i&(1<<j)))continue;for(int k=0;k<n;++k){if(j==k)continue;int  c=cost[t[j].in][t[k].in]+t[k].d;if(!(i&(1<<k))&&dp[i][j]>=c){int tot=dp[i][j]-c+t[k].c;dp[i|(1<<k)][k]=max(dp[i|(1<<k)][k],tot);}}}int f=0;for(int i=0;i<n;++i)if(dp[cas][i]>=cost[1][t[i].in]){// cout<<dp[cas][i]<<endl;f=1;break;}if(f)printf("YES\n");else printf("NO\n");
}
int main()
{int te;scanf("%d",&te);while(te--){scanf("%d%d%d",&tn,&m,&money);for(int i=0;i<=tn;++i)for(int j=0;j<=tn;++j){if(i==j)cost[i][j]=0;else cost[i][j]=INF;}int u,v,c;for(int i=0;i<m;++i){scanf("%d%d%d",&u,&v,&c);cost[u][v]=cost[v][u]=min(cost[u][v],c);}floyd();scanf("%d",&n);for(int i=0;i<n;++i)scanf("%d%d%d",&t[i].in,&t[i].c,&t[i].d);solve();}
return 0;
}

  

转载于:https://www.cnblogs.com/zsf123/p/4674930.html

Travel(HDU 4284状压dp)相关推荐

  1. hdu 4284(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先f ...

  2. hdu 1074 状压dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:有n个作业,对于每一个作业有一个deadline,有一个完成这作业所需要的时间.如果超过d ...

  3. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

  4. hdu 4640(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...

  5. hdu 4539(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 思路:跟poj1185简直就是如出一辙! 1 #include<iostream> ...

  6. HDU 5045 状压DP 上海网赛

    比赛的时候想的是把n个n个的题目进行状压 但这样不能讲究顺序,当时精神面貌也不好,真是挫死了 其实此题的另一个角度就是一个n个数的排列,如果我对n个人进行状压,外面套一个按题目循序渐进的大循环,那么, ...

  7. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  8. Tunnels HDU - 4856 (bfs状压dp)

    Tunnels HDU - 4856 Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his ...

  9. HDU - 4856 Tunnels (预处理+状压dp)

    HDU - 4856 Tunnels (预处理+状压dp) [hud链接] [vj链接] 题目 Problem Description Bob is travelling in Xi'an. He f ...

最新文章

  1. php 提交成功后跳转,PHP提交后跳转的简单示例
  2. MonitorService-监控服务类2
  3. [转] form.getForm().submit的用法及Ext.Ajax.request的小小区别
  4. 压缩追踪Compressive Tracking源码理解
  5. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
  6. Netflix Archaius用于物业管理–基础知识
  7. 流媒体技术学习笔记之(十六)H264编码profile level控制
  8. 开源mysql客户端_14款经典的MySQL客户端软件
  9. delphi cxgrid读取本地image_读取多个(海康\大华)网络摄像头的视频流 (使用opencv-python),解决实时读取延迟问题...
  10. markdown下载以及安装详情
  11. 百度 bos php,百度开放云 BOS Uploader
  12. 7-39 龟兔赛跑 (20 分) 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。T分钟后乌龟和兔子谁跑得快?PTA:中M2021春C、Java入门练习第I段—变量、表达式、分支、循环
  13. 移动通信核心网技术总结(四)IMS的网络架构和功能
  14. 来吧!带你玩转 Excel VBA
  15. ChatGPT插件与简要介绍(已收集70个)了解添加插件后的chatgpt能做什么
  16. MAME模拟器debug帮助文档汉化一(介绍)
  17. stm32f4 RTC实时时钟解析
  18. Unable to start activity ComponentInfo 解决方法
  19. 关于JavaScript框架介绍
  20. Linux概述、发展史

热门文章

  1. 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
  2. 虚拟机实现java线程_深入理解java虚拟机(23):java与多线程
  3. t–sql pl–sql_SQL日期时间–您应该知道的15个重要功能!
  4. jquery 图像滑块_jQuery CSS图像滑块–自行编写代码
  5. jvm诊断之学习jcmd入门
  6. 那么多编程语言,为什么要选择C++?
  7. 关于appium中的Multiaction的用法
  8. this 改变this的指向
  9. 简单的shell命令
  10. kubeadm部署k8s1.9高可用集群--1集群概述