uva1025-《算法入门经典》
来源:互联网 发布:软件板块拓尔思 编辑:程序博客网 时间:2024/04/29 18:01
题目链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3466
分析
从dp[T][n]一直往前转化
#include<cstdio>#include<cstring>#include<algorithm>#define maxn 59#define maxt 209#define INF 0x3f3f3f3fint N,T,M1,M2;int dp[maxt][maxn];//t时刻在n车站的最优等待时间int has_train[maxt][maxn][2];//t时刻在i车站有向左(右)的火车 int t[maxn];//i车站到i+1车站的时间using namespace std;void init(){ memset(dp,0,sizeof(dp)); memset(has_train,0,sizeof(has_train)); memset(t,0,sizeof(t));}int main(){ freopen("H:\\c++\\file\\stdin.txt","r",stdin); int k = 0; while(scanf("%d",&N)&&N!=0) { init(); scanf("%d",&T); for(int i=1 ; i<N; ++i)scanf("%d",&t[i]); t[0] = 0; t[N] = 0; //T,时刻在除n车站以外的车站等待时间是无穷大 for(int i=1 ; i<N;++i)dp[T][i] = INF; scanf("%d",&M1); while(M1--) { int start; scanf("%d",&start); for(int i=0 ; i<N;++i) { has_train[start+t[i]][i+1][0]=1; start += t[i]; } } scanf("%d",&M2); while(M2--) { int start; scanf("%d",&start); has_train[start][N] [1]= 1; for(int i=N -1; i>0;i--) { has_train[start+t[i]][i][1]=1; start += t[i]; } } //决策 for(int i=T-1 ; i>=0 ; i--) { for(int j=1 ; j<=N ; ++j) { dp[i][j] = dp[i+1][j]+1; if(j<N && has_train[i][j][0] && i+t[j]<=T) {//往右行,决定在下一个站是否换乘 if(dp[i][j]>dp[i+t[j]][j+1]){ dp[i][j] = dp[i+t[j]][j+1]; } } if(j>1 && has_train[i][j][1] && i+t[j-1] <=T) {//往左 if(dp[i][j]>dp[i+t[j-1]][j-1]){ dp[i][j] = dp[i+t[j-1]][j-1]; } } } } printf("Case Number %d: ",++k); if(dp[0][1]>=INF)printf("impossible\n"); else printf("%d\n",dp[0][1]); /*输出换站时间及车站*/ for(int i=0 ; i<=T ; ++i) { for(int j=1 ; j<=N ; ++j) { if(dp[i][j] == dp[0][1] && has_train[i][j][0]&&has_train[i][j][1]) { printf("%d %d\n",i,j); } } } printf("\n"); } return 0; }
输出结果(未严格证明)
/*输出换站时间及车站*/ for(int i=0 ; i<=T ; ++i) { for(int j=1 ; j<=N ; ++j) { if(dp[i][j] == dp[0][1] && has_train[i][j][0]&&has_train[i][j][1]) { printf("%d %d\n",i,j); } } }
2 0
- uva1025-《算法入门经典》
- UVa1025
- UVa1025
- UVa1025
- UVa1025
- UVa1025
- uva1025
- uva1025
- 算法竞赛入门经典
- 算法竞赛入门经典
- 算法入门经典-2
- 算法入门经典-1
- 【算法入门经典】 第一章
- 算法入门经典
- 算法入门经典:WERTYU
- #UVA1025#A Spy in the Metro(Dp经典)
- 算法竞赛入门经典心得
- 《算法竞赛入门经典》勘误表
- Android app中区别网页H5 web 和原生布局方法
- 给vmware虚拟机中的ubuntu扩大磁盘分区
- #419 Roman to Integer
- CentOS6 上OpenWRT交叉编译
- Scala学习第六弹 条件表达式
- uva1025-《算法入门经典》
- JavaScript编写异或函数
- Android官方的sdk,ndk,build-tools,android-x, tools,adt...下载地址
- 传值传参和引用传参
- PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测
- 蚂蚁碰撞概率计算
- Flink流计算编程--如何实现基于KEY/VALUE的List State
- MySql 数据文件默认位置&导入数据文件
- 自然语言处理