poj2686
2015-10-17 13:45
141 查看
链接:点击打开链接
题意:n张车票,m座城市,k条路,问从城市a到城市b的最短时间,从一个城市移动到另一个城市所需时间等于城市之间的长度除以每张票上数字,一张票只能使用一次
代码:
题意:n张车票,m座城市,k条路,问从城市a到城市b的最短时间,从一个城市移动到另一个城市所需时间等于城市之间的长度除以每张票上数字,一张票只能使用一次
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <stdlib.h> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; int t[50],d[30][30]; double dp[1<<10][30]; int main(){ //状态压缩dp int i,n,m,k,a,b,x,y,z,S; double ans; while(scanf("%d%d%d%d%d",&n,&m,&k,&a,&b)!=EOF&&(n||m||k||a||b)){ memset(d,-1,sizeof(d)); for(i=0;i<(1<<n);i++) fill(dp[i],dp[i]+m,INF); for(i=0;i<n;i++) scanf("%d",&t[i]); for(i=0;i<k;i++){ scanf("%d%d%d",&x,&y,&z); d[x-1][y-1]=d[y-1][x-1]=z; } ans=INF; dp[(1<<n)-1][a-1]=0; for(S=(1<<n)-1;S>=0;S--){ //遍历所有状态 ans=min(ans,dp[S][b-1]); for(x=0;x<m;x++){ for(y=0;y<n;y++){ if((S>>y)&1){ //票没有使用过 for(z=0;z<m;z++){ if(d[x][z]>=0){ dp[S&(~(1<<y))][z]=min(dp[S&(~(1<<y))][z],dp[S][x]+(double)d[x][z]/t[y]); } } } } } } if(ans==INF) printf("Impossible\n"); else printf("%.3lf\n",ans); } return 0; }
相关文章推荐
- Servlet生命周期
- Threejs 它可以在建立其内部房间效果可见
- CodeForces 221D Little Elephant and Array
- QYQ的图
- Cocostudio工具创建工程,因没有字体资源导致在vs中编译时,出现中文乱码现象
- swift 自定义控件在StoryBoard(xib)里使用的属性
- SQL COUNT() 函数
- oracle 11g 64w 用32位的pl/sql
- Struts2部署后抛出404 Tomcat work目录下均为空目录
- 数据结构考研复习--线性表2
- 黑马程序员--C语言指针
- java操作oracle数据库的时间类型
- Nginx模块参考手册:HTTP核心模块
- iOS:死锁
- ubuntu adb配置
- SQL AVG 函数
- 黑马程序员-- ID init(构造方法) Class NSLog description SEL
- oracle 使用 date timestamp 而不使用varchar2()的好处
- JAVA开源爬虫,WebCollector,使用方便,有接口。
- 百度云推送java端报错parameter msg must be Json-Array-String解决方法