Time Limit: 2000MS | Memory Limit: 65536K | |||
Total Submissions: 2276 | Accepted: 787 | 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
//1代表没走,0代表走了。 #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define inf 100000000 int n,m,a,b; int t[10],d[35][35]; double dp[1<<15][35]; void solve() { //memset(dp,inf,sizeof(dp)); for(int i=0;i<1<<n;i++) for(int j=0;j<1<<n;j++) dp[i][j]=inf; dp[(1 << n) - 1][a-1] = 0; double res = inf; for (int S = (1 << n) - 1; S >= 0; S--) { res = min(res, dp[S][b-1]); for (int v = 0; v < m; v++) { for (int i = 0; i < n; i++) { if (S >> i & 1) {//第i个城市是否为1. for (int u = 0; u <m; u++) { if (d[u][v] >= 0) { dp[S & ~(1 << i)][u] = min(dp[S & ~(1 << i)][u], dp[S][v] + d[u][v] / (double)t[i]);//把第i位变为1. } } } } } } if(res == inf) printf("Impossible\n"); else printf("%.3f\n", res); } int main() { int p; for(;;) { scanf("%d%d%d%d%d",&n,&m,&p,&a,&b); if(n==0&&m==0&&p==0&&a==0&&b==0) break; int i,j; memset(d, -1, sizeof(d)); for(i=0;i<n;i++) scanf("%d",&t[i]); int x,y,z; for(i=0;i<p;i++) { scanf("%d%d%d",&x,&y,&z); d[x-1][y-1]=d[y-1][x-1]=z; } solve(); } return 0; }
poj2686 Traveling by Stagecoach
原文:http://www.cnblogs.com/cancangood/p/4541038.html