虽然题中有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)的更多相关文章

  1. hdu 4284 Travel(壮压DP&TSP&floyd)

    Travel Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  2. 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 ...

  3. HDU 4284 Travel

    据说是TSP经典问题...可以用状态压缩做.但是看到数据量,就厚着脸皮上搜索了...先floyd预处理每对点间的最小消费,然后只考虑要去的城市就可以了,这样的话城市数最多16个...当时就暴搜了... ...

  4. HDU 4284 Travel (Folyd预处理+dfs暴搜)

    题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不 ...

  5. hdu 5380 Travel with candy(双端队列)

    pid=5380">题目链接:hdu 5380 Travel with candy 保持油箱一直处于满的状态,维护一个队列,记录当前C的油量中分别能够以多少价格退货,以及能够推货的量. ...

  6. Travel(HDU 4284状压dp)

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

  7. hdu 4284(状压dp)

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

  8. hdu 1596(Floyd 变形)

    http://acm.hdu.edu.cn/showproblem.php?pid=1596 find the safest road Time Limit: 10000/5000 MS (Java/ ...

  9. hdu 1217 (Floyd变形)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 Arbitrage Time Limit: 2000/1000 MS (Java/Others)   ...

随机推荐

  1. gethostbyname()函数说明

    gethostbyname()函数说明——用域名或主机名获取IP地址 包含头文件    #include <netdb.h>    #include <sys/socket.h> ...

  2. Windows Azure 网站的 IP 和域限制

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. 配置 Azure 网站 (WAWS) 的 IP 和域限制一直是用户最迫切希望我们提供 ...

  3. linux下执行sh文件报错:oswatcher_restart.sh: line 13: ./startOSW.sh: Permission denied

    1 查看执行sh文件的内容 [root@xxxdb0402 dbscripts]# more oswatcher_restart.sh  #!/usr/bin/ksh #export oswdir=` ...

  4. spoj 1812 lcsII (后缀自动机)

    spoj 1812 lcsII (后缀自动机) 题意:求多个串的lcs,最多10个串,每个串最长10w 解题思路:后缀自动机.先建好第一个串的sam,然后后面的串拿上去跑(这个过程同前一题).sam上 ...

  5. android 调用系统打电话和发短,懒得记

     Intent intent = new Intent();         intent.setAction(Intent.ACTION_CALL);         intent.setData( ...

  6. Delphi的RTTI还分为对类和对象的判断,以及对普通属性的判断——相比之下,C++的RTTI实在太弱!

    堂堂C++沦落到这个地步,也实在是够可怜的.

  7. redisTemplate 操作

    redisDao封装类-其他dao集成他 package com.ffcs.wlan.dao.common; import javax.annotation.Resource; import org. ...

  8. dedecms的安装以及为他配置虚拟主机

    一.概念: 1.CMS是:Content Manage System   内容管理系统 内容包括:商品,文章,软件,视频 2.当前市面上常用的CMS有哪些? DedeCMS: 织梦     中小型公司 ...

  9. linux下tomcat shutdown后 java进程依然存在

    今天遇到一个非常奇怪的问题,如标题所看到的: linux下(之所以强调linux下,是由于在windows下正常),运行tomcat ./shutdown.sh 后,尽管tomcat服务不能正常訪问了 ...

  10. URAL 1180. Stone Game (博弈 + 规律)

    1180. Stone Game Time limit: 1.0 second Memory limit: 64 MB Two Nikifors play a funny game. There is ...