UVa 1025 A Spy in the Metro
2016-06-10 18:56
375 查看
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913
预处理出每个时间、每个车站是否有火车
为了方便判断是否可行,倒推处理,每次有三种决策:原地坐等一分钟、搭车向左(如果有车)、搭车向右(如果有车)
/**/ #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int mxn=300; int n,T; bool h[mxn][mxn][2]; int ti[mxn]; int m,d,e; int f[mxn][mxn]; void clear(){ memset(ti,0,sizeof(ti)); memset(h,0,sizeof(h)); memset(f,111,sizeof(f)); } int main(){ int cnt=0; while(scanf("%d",&n) && n){ clear(); scanf("%d",&T); int i,j; for(i=1;i<n;i++)scanf("%d",&ti[i]);//车站距离 scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d",&d);//左边发车时间 for(j=1;d<=T && j<=n;d+=ti[j],j++){ h[d][j][0]=1; } } scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d",&e);//右边发车时间 for(j=n;e<=T && j>=1;j--,e+=ti[j]){ h[e][j][1]=1; } } //以上全是初始化 f[T] =0; for(i=T-1;i>=0;i--){//倒推 for(j=1;j<=n;j++){ f[i][j]=f[i+1][j]+1;//等待 if(j<n && h[i][j][0] && i+ti[j]<=T) f[i][j]=min(f[i][j],f[i+ti[j]][j+1]);//向右 if(j>1 && h[i][j][1] && i+ti[j-1]<=T) f[i][j]=min(f[i][j],f[i+ti[j-1]][j-1]);//向左 } } printf("Case Number %d: ",++cnt); if(f[0][1]>=0xff) printf("impossible\n"); else printf("%d\n",f[0][1]); } return 0; }
相关文章推荐
- Android 数据存储方式
- 修改LINUX目录或文件的权限和所有权详解
- Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总
- 数据库之――索引、触发器、事务(存储引擎)
- 韦东山 文件系统映像,mount挂接文件系统
- Android 三种常见动画
- Codeforces645E Intellectual Inquiry
- HTML5中canvas画图之根据触摸点画三角形
- 项目乐学成语HappyIdiom
- leetcode 354. Russian Doll Envelopes
- activity 四种启动方式
- 洛谷P1908 求逆序对 [归并排序]
- apache目录浏览
- java命令行下如何设置classpath类路径
- 上传文件时$_FILES为空的解决方法
- ajax回调函数 异步延迟
- java命令行运行设置classpath星号的作用
- linux文本处理 sort,grep,sed,awk,uniq 用法
- 无线的优势
- Android应用组件