Hoj 2665 Factory of XiaoE
2013-04-26 22:51
120 查看
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2665
本题是经典的旅行商(TSP)问题.
可以用状态压缩DP来做,dp[i][j]的定义:状态为i时,以某号城市为起点,且我站在第j个地点对应的最短路径。
本题是经典的旅行商(TSP)问题.
可以用状态压缩DP来做,dp[i][j]的定义:状态为i时,以某号城市为起点,且我站在第j个地点对应的最短路径。
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; #define Maxk (1<<16) #define Maxn 16 #define INF 0x3f3f3f3f int dp[Maxk][Maxn]; int dist[Maxn][Maxn]; int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int n,m; int sum; int a,b; while(scanf(" %d %d",&n,&m)!=EOF) { sum = 0; for(int i=0;i<n;i++) { scanf(" %d %d",&a,&b); sum += (b - a); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf(" %d",&dist[i][j]); } } memset(dp,0x3f,sizeof(dp)); m--; dp[1<<m][m] = 0; for(int i=0;i<(1<<n);i++) { //状态中含有起点 if(i & (1<<m)) { for(int j=0;j<n;j++) { if(i & (1<<j) && j!=m && i!=(1<<j)) { int temp = i - (1<<j); for(int k=0;k<n;k++) { if(temp & (1<<k)) { dp[i][j] = min(dp[i][j],dp[temp][k] + dist[k][j]); } } } } } } int ans = INF; for(int i=0;i<n;i++) ans = min(ans,dp[(1<<n) - 1][i]); printf("%d\n",sum - ans); } return 0; }
相关文章推荐
- (简单) 状态压缩dp HOJ 2665 Factory of XiaoE
- HOJ 2662 Pieces Assignment(状态压缩DP)
- hdu 5433 Xiao Ming climbing(优先队列+BFS)
- HOJ-1005
- HOJ-2662Pieces Assignment(状态压缩,动态规划)
- HDU 2665 Kth number 划分树 第一弹
- HOJ 2133&POJ 2964 Tourist(动态规划)
- HOJ 2252 The Priest(动态规划)
- when compile /home/wangxiao/NVIDIA-CUDA-7.5 SAMPLES, it warning: gcc version larger than 4.9 not supported, so: old verson of gcc and g++ are needed
- E - Super Jumping! Jumping! Jumping!——HOJ
- HOJ 1020
- hdu 4349——Xiao Ming's Hope
- hdu 2665 Kth number(划分树模板题)
- HOJ 1314
- HOJ 2201 题解
- hoj 2430 Counting the algorithms (树状数组)
- xiaoCMS中sqllite转成mysql
- POJ 2104 & HDU 2665 & POJ 2761 K-th Number (主席树入门题 区间第K大)
- 主席树(Kth number,HDU 2665)
- HOJ——T 1867 经理的烦恼