标签:c代码 ann 过程 else find term net clu efi
Time Limit: 2000MS | Memory Limit: 65536K | |||
Total Submissions: 3293 | Accepted: 1253 | Special Judge |
Description
Input
Output
Sample Input
3 4 3 1 4 3 1 2 1 2 10 2 3 30 3 4 20 2 4 4 2 1 3 1 2 3 3 1 3 3 4 1 2 4 2 5 2 4 3 4 1 5 5 1 2 10 2 3 10 3 4 10 1 2 0 1 2 1 8 5 10 1 5 2 7 1 8 4 5 6 3 1 2 5 2 3 4 3 4 7 4 5 3 1 3 25 2 4 23 3 5 22 1 4 45 2 5 51 1 5 99 0 0 0 0 0
Sample Output
30.000 3.667 Impossible Impossible 2.856
Hint
30.0
3.66667
Impossible
Impossible
2.85595
题意:旅行家要从城市a旅行到城市b,他的手里有n张马车票,使用马车票可以让旅行家在任意一条马路上通行,马车票上印有马匹的数量t[i],并规定道路的长度除以马匹的数量就是通行该路所花的时间。那么旅行家从城市a到b至少需要花多少时间,如果无法通行,输出‘Impossible’
思路:状态压缩dp,设集合S为旅行家手里剩余的马车票,dp[S][v]含义:旅行家还剩余的马车票组成集合S,并且已到达城市v的时候所花的时间总和。若目前已到达城市v,且马车票组成的集合为S,此时使用集合S中的第i张马车票到达城市u,那么状态转移过程可以表示为:
dp[S&~(1<<i)][u]=min{dp[S&~(1<<i)][u],dp[s][v]+d[s][v]/t[i]};
AC代码:
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<algorithm> #include<string> #include<set> #include<map> #include<vector> #include<queue> #include<functional> using namespace std; typedef long long ll; const int M_MAX = 30,N_MAX=8+1; int n, m, p,a, b, t[N_MAX]; int d[M_MAX][M_MAX]; double dp[1 << N_MAX][M_MAX];//dp[s][v]剩下的车票集合为S,当前在城市v,所花费的钱 int main() { while (scanf("%d%d%d%d%d", &n, &m, &p, &a, &b)&&n) { a--, b--; for (int i = 0; i < n; i++) { scanf("%d", &t[i]); } memset(d, -1, sizeof(d)); for (int i = 0; i < p; i++) { int x, y, z; scanf("%d%d%d", &x, &y, &z); x--, y--; d[x][y] = z; d[y][x] = z; } for (int i = 0; i < 1<<n; i++) { fill(dp[i], dp[i] + m,INT_MAX/2); } double res = INT_MAX / 2; dp[(1 << n) - 1][a] = 0;//车票都在,人在起点,花费为0 for (int S = (1 << n) - 1; S >= 0; S--) { res = min(res,dp[S][b]); for (int v = 0; v < m;v++) { for (int i = 0; i < n; i++) { if ((S >> i) & 1) {//这张票还没用的话就用掉 for (int u = 0; u < m; u++) { if(d[v][u]>=0)//!!!!!! dp[S&~(1 << i)][u] = min(dp[S&~(1 << i)][u],dp[S][v]+(double)d[v][u]/t[i]); } } } } } if (res == INT_MAX / 2) printf("Impossible\n"); else printf("%.3f\n",res); } return 0; }
poj 2686 Traveling by Stagecoach
标签:c代码 ann 过程 else find term net clu efi
原文地址:http://www.cnblogs.com/ZefengYao/p/6682819.html