UVa1025
来源:互联网 发布:华彩人生一点通 mac 编辑:程序博客网 时间:2024/05/16 06:06
UVa1025
红书上的例题9-1,影响决策的只有当前的时间以及所在的站,所以用d(i,j)表示i时刻在j站。然后就是无非两种选择,一种是等一分钟,或是有车的话, 乘车到最近的一站。精妙之处在于has_train的三位数组。还有就是,时间是单向流逝的,是个天然的序。
代码
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int INF=0x3f3f3f3f;int kase=0;int main(){ int n; while(scanf("%d",&n)&&n!=0) { int T,M1,M2,time[n+1]; scanf("%d",&T); int dp[T+1][n+1]; int has_train[T+100][n+1][2]; memset(has_train,0,sizeof(has_train)); memset(time,0,sizeof(time)); memset(dp,0,sizeof(dp)); for(int i=1; i<n; i++) scanf("%d",&time[i]); scanf("%d",&M1); for(int i=0; i<M1; i++) { int a; scanf("%d",&a); int k=a; for(int j=1; j<=n; j++) { has_train[k][j][0]=1; k+=time[j]; } } scanf("%d",&M2); for(int i=0; i<M2; i++) { int a; scanf("%d",&a); int k=a; for(int j=n; j>=1; j--) { has_train[k][j][1]=1; k+=time[j-1]; } } for(int i=1; i<=n-1; i++) dp[T][i]=INF; dp[T][n]=0; 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+time[j]<=T) dp[i][j]=min(dp[i][j],dp[i+time[j]][j+1]); if(j>1&&has_train[i][j][1]&&i+time[j-1]<=T) dp[i][j]=min(dp[i][j],dp[i+time[j-1]][j-1]); } cout<<"Case Number "<<++kase<<": "; if(dp[0][1]>=INF) cout<<"impossible\n"; else cout<<dp[0][1]<<"\n"; } return 0;}
1 0
- UVa1025
- UVa1025
- UVa1025
- UVa1025
- UVa1025
- uva1025
- uva1025
- dp uva1025
- uva1025(基础dp)
- uva1025-《算法入门经典》
- UVa1025/UVa437/UVa1347
- uva1025 动态规划
- UVA1025 固定终点二维dp
- [UVA1025]城市里的间谍
- uva1025 A Spy in the Metro
- UVa1025 - A Spy in the Metro
- UVa1025 DP (还要再看看~)
- Uva1025 - A Spy in the Metro
- 重力感应学习
- linux中软件包管理
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
- str.find() & str.rfind()
- scrapy模拟登录微博
- UVa1025
- UVA 644(字符串)
- /dev/null和/dev/tty
- C++关键字
- git学习笔记1- git 概念-依据git权威指南
- Java中用final修饰的变量
- 脱壳学习笔记一:常用工具
- OC_数组
- Android中WebView与JS的交互