hdu 4284 Travel(floyd + TSP)
虽然题中有n<=100个点,但实际上你必须走过的点只有H<=15个。而且经过任意点但不消耗C[i]跟D[i]可以为无限次,所以可以floyd预处理出H个点的最短路,之后剩下的。。。就成了裸的TSP了,dp[sta][i]表示已经遍历过了sta集合中的点,现在在i点所需的最少花费。dp[i][j]=-1表示该点不可到达。。但是在最后统计最小解的时候要特判。。。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<fstream>
#include<sstream>
#include<bitset>
#include<vector>
#include<string>
#include<cstdio>
#include<cmath>
#include<stack>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define FF(i, a, b) for(int i=a; i<b; i++)
#define FD(i, a, b) for(int i=a; i>=b; i--)
#define REP(i, n) for(int i=0; i<n; i++)
#define CLR(a, b) memset(a, b, sizeof(a))
#define debug puts("**debug**")
#define LL long long
#define PB push_back
#define MP make_pair
#define eps 1e-10
using namespace std; const int maxn = 105;
const int INF = 1e9;
int n, m, H, V, T;
int go[20], C[20], D[20], g[maxn][maxn], dp[1<<15][20]; void floyd()
{
FF(i, 1, n+1)
{
FF(j, 1, n+1) g[i][j] = INF;
g[i][i] = 0;
}
int u, v, w;
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
if(g[u][v] > w) g[u][v] = g[v][u] = w;
}
FF(k, 1, n+1) FF(i, 1, n+1) FF(j, 1, n+1) g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
} int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &n, &m, &V);
floyd(); scanf("%d", &H);
REP(i, H) scanf("%d%d%d", &go[i], &C[i], &D[i]); int tot = (1<<H) - 1;
CLR(dp, -1);
REP(i, H) if(V - g[1][go[i]] >= D[i]) dp[1<<i][i] = g[1][go[i]] - C[i] + D[i]; FF(i, 1, tot+1) REP(j, H) if(dp[i][j] != -1) //dp[i][j]可到达
{
REP(k, H) if((i&(1<<k)) == 0) //k点未到达
{
int sta = i|(1<<k);
if(V - dp[i][j] - g[go[j]][go[k]] >= D[k])
{
if(dp[sta][k] == -1) dp[sta][k] = dp[i][j] + g[go[j]][go[k]] - C[k] + D[k];
else dp[sta][k] = min(dp[sta][k], dp[i][j] + g[go[j]][go[k]] - C[k] + D[k]);
}
}
}
int ans = INF;
//特判dp[tot][i]可到达,最开始忘了。。。10+wa
REP(i, H) if(dp[tot][i] != -1) ans = min(ans, dp[tot][i] + g[go[i]][1]);
printf("%s\n", ans <= V ? "YES" : "NO");
}
return 0;
}
hdu 4284 Travel(floyd + TSP)的更多相关文章
- hdu 4284 Travel(壮压DP&TSP&floyd)
Travel Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDU - 4284 Travel(floyd+状压dp)
Travel PP loves travel. Her dream is to travel around country A which consists of N cities and M roa ...
- HDU 4284 Travel
据说是TSP经典问题...可以用状态压缩做.但是看到数据量,就厚着脸皮上搜索了...先floyd预处理每对点间的最小消费,然后只考虑要去的城市就可以了,这样的话城市数最多16个...当时就暴搜了... ...
- HDU 4284 Travel (Folyd预处理+dfs暴搜)
题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不 ...
- hdu 5380 Travel with candy(双端队列)
pid=5380">题目链接:hdu 5380 Travel with candy 保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量. ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
- hdu 4284(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先f ...
- hdu 1596(Floyd 变形)
http://acm.hdu.edu.cn/showproblem.php?pid=1596 find the safest road Time Limit: 10000/5000 MS (Java/ ...
- hdu 1217 (Floyd变形)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- ZOJ 3594 年份水题 【注意:没有0年】
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- 1、Zookeeper熟悉和用途综述
集群 配置: 192.168.32.80 192.168.32.81 192.168.32.82 server 1: zjtest7-redis:/opt/zookeeper/conf# cat zo ...
- J2EE基础篇——十三个规范
背景: 1.企业级应用框架的需求,在很多企业级应用中.比如数据库连接.邮件服务.事务处理等都是一些通用企业需求模块,这些模块假设每次在开发中都由开发者来完毕的话,将会造成开发周期长和代码可靠性差等问题 ...
- opencv视频播放
在一个界面上显示一张图片.是一件非常easy的事情,但说到要显示视频.刚開始学习的人可能不知道怎么处理,事实上,一般来说能够理解为视频就是图片以人眼察觉不到的速度高速更新. 曾经用摄像头採集视频显示在 ...
- mysql的用户管理(二)
与权限相关的表由于经常需要用到,所以mysql直接将这些表在mysql启动时写到了内存中,避免每次验证权限时再从磁盘写数据. 当以下条件发生时发refresh权限表信息到内存: 1.对帐户的更改时,如 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)
hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加 ...
- Java返回类型泛型的用法小结
Java返回类型泛型的用法小结 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型D ...
- 小W与网格
lucas定理 http://www.cnblogs.com/vongang/archive/2012/12/02/2798138.html 题目:http://hihocoder.com/conte ...
- Javascript 中的非空判断 undefined,null, NaN的区别
JS 数据类型 在介绍这三个之间的差别之前, 先来看一下JS 的数据类型. 在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,.... 但是 ...
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)
昨天介绍了mybatis与spring的整合,今天我们完成剩下的springmvc的整合工作. 要整合springmvc首先得在web.xml中配置springmvc的前端控制器DispatcherS ...