hdu -4284 Travel(状态压缩)
2014-10-14 12:01
239 查看
题意:小P去旅游,给你n个城市,m条路以及m条路的花费,还有一些特定的城市,这些城市必须经过,并且到达这一城市还要先拿到证,在工作去挣钱;
问你是否能通过所有的特定城市。
题解:状态方程:dp[i|(1<<k)][k] = max(dp[i|(1<<k)][k],dp[i][j] - d[num[k]][num[j]] - D[k]+C[k]);
表示到达第k个城市的的状态的最多的钱
问你是否能通过所有的特定城市。
题解:状态方程:dp[i|(1<<k)][k] = max(dp[i|(1<<k)][k],dp[i][j] - d[num[k]][num[j]] - D[k]+C[k]);
表示到达第k个城市的的状态的最多的钱
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int M = 1<<16; #define INF 2122219134 int dp[M+2][20]; int d[105][105]; int num[20],C[20],D[20]; int n; void Floyd(){ for(int k = 1;k <= n;k++) for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) if (d[i][k] < INF && d[k][j] < INF && d[i][j] > d[i][k]+d[k][j]) d[i][j] = d[i][k] + d[k][j]; } int main(){ int t,u,v,w; int m,money,H; cin >> t; while(t--){ cin >> n >> m >> money; memset(d,126,sizeof(d)); // cout << d[0][0] << endl; for(int i = 1;i <= n;i++) d[i][i] = 0; for(int i = 0;i < m;i++){ cin >> u >> v >> w; d[u][v] = d[v][u] = min(d[u][v],w); } Floyd(); cin >> H; memset(dp,-1,sizeof(dp)); for(int i = 0;i < H;i++){ cin >> num[i] >> C[i] >> D[i]; if(money > d[num[i]][1] + D[i]) dp[1<<i][i] = max(dp[1<<i][i],money - d[num[i]][1] - D[i] + C[i]); } int cnt = (1<<H) - 1; for(int i = 0;i < cnt;i++){ for(int j = 0;j < H;j++){ if(!(i&(1<<j))) continue; for(int k = 0;k < H;k++){ if(i&(1<<k)) continue; if(dp[i][j] >= d[num[j]][num[k]] + D[k]) dp[i|(1<<k)][k] = max(dp[i|(1<<k)][k],dp[i][j] - d[num[j]][num[k]] - D[k] + C[k]); } } } int flag = 0; for(int i = 0;i < H;i++){ if(dp[cnt][i] - d[num[i]][1] >= 0){ flag = 1;break; } } if(flag) cout << "YES" << endl; else cout << "NO" << endl; } }
相关文章推荐
- HDU 4284 Travel(状态压缩DP)
- HDU 4284 Travel【状态压缩DP】
- HDU 4284 Travel / 状态压缩DP
- Hdu 4284 Travel(状态压缩)
- HDU 4284 Travel (状态dp)
- HDU 4284 Travel(12年天津online floyd + tsp状态DP)
- hdu 4284(状态压缩)&& poj 3311 &&,,,
- HDU 4284(状态压缩dp)
- hdu4284之状态压缩dp
- hdu 4284 Travel(压缩DP,4级)
- hdu 4284 状态压缩dp
- hdu 4284 Travel(压缩DP,4级)
- hdu 4284 状态压缩
- HUD 4284 Travel && POJ 3229 The Best Travel Design(状态压缩)
- HDU 4284 Travel(12年天津 状态DP)
- hdu 1565 状态压缩 dp
- HDU 3001 Travelling 【状态压缩DP】
- HDU 4049 状态压缩DP
- hdu 3811 用状态压缩DP 解决看似组合数学的题目
- hdu 3001 状态压缩