poj 2686 Traveling by Stagecoach(状压dp)
2014-07-26 15:14
351 查看
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<algorithm> using namespace std; #define inf 0x3f3f3f3f #define lc l,m,index<<1 #define rc m+1,r,index<<1|1 #define max_n 100005 #define mod 1000000007 double t[max_n]; double dp[1<<10][100]; double d[105][105]; int n,m,a,b,p; void init() { for(int i=0;i<105;i++) { for(int j=0;j<105;j++) d[i][j]=inf; } for(int i=0;i<1<<n;i++) { fill(dp[i],dp[i]+m,inf); } } int main() { while(~scanf("%d%d%d%d%d",&n,&m,&p,&a,&b)) { if(n==m && m==p && p==0) break; init(); for(int i=0;i<n;i++) scanf("%lf",&t[i]); for(int i=0;i<p;i++) { int x,y; double val; scanf("%d%d%lf",&x,&y,&val); x--; y--; d[x][y]=min(d[x][y],val); d[y][x]=min(d[y][x],val); } dp[(1<<n)-1][a-1]=0; double ans=inf; for(int s=(1<<n)-1;s>=0;s--) { ans=min(ans,dp[s][b-1]); 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]!=inf) dp[s&~(1<<i)][u]=min(dp[s&~(1<<i)][u],dp[s][v]+d[v][u]/t[i]); } } } } } if(ans==inf) printf("Impossible\n"); else printf("%.3f\n",ans); } return 0; }
相关文章推荐
- POJ 2686 Traveling by Stagecoach(状压DP)
- 【POJ 2686 Traveling by Stagecoach】+ 状压dp
- [POJ-2686] Traveling by Stagecoach(状压dp)
- POJ 2686 Traveling by Stagecoach(状压DP)
- POJ2686 Traveling by Stagecoach(状压DP)
- poj 2686 Traveling by Stagecoach TSP 图 状压dp
- POJ 2686 ->Traveling by Stagecoach(状压DP)
- POJ 2686 Traveling by Stagecoach(状压DP)
- POJ - 2686 Traveling by Stagecoach——状压dp
- poj 2686 Traveling by Stagecoach(状压dp)
- POJ 2686 Traveling by Stagecoach (状压DP)
- POJ 2686 Traveling by Stagecoach(状态压缩dp)
- POJ 2686-Traveling by Stagecoach(DAG图-状态压缩DP)
- POJ 2686_Traveling by Stagecoach【状态压缩DP】
- POJ 2686 Traveling by Stagecoach 壮压DP
- POJ_2686_Traveling by Stagecoach_状态压缩dp
- POJ 2686_Traveling by Stagecoach【状态压缩DP】
- poj 2686 Traveling by Stagecoach ---状态压缩DP
- Traveling by Stagecoach(POJ-2686)(状态压缩DP)
- poj 2686 Traveling by Stagecoach ---状态压缩DP