A SPY in the Metro(城市里的间谍),UVA1025【dp】

用dp[i][j]来表示时间i时在车站j所需的时间,则dp[T][n]为0,及此时已达终点,还需等待时间为零。而dp[T][j]为INF(j
往前递推时有三种状况:
1,等一分钟,即dp[i][j]=dp[i+1][j]+1。  
2.搭上往右开的车
3.搭上往左开的车
因为递推情况是在车站的情况,所以不存在在车上的状况
#include
using namespace std;
#define INF 0x3f3f3f3f
int main() {
	int n,T,Case=1;
	while(cin>>n&&n) {
		cin>>T;
		int t[60]= {0};                                //记录每个车站到下一站的时间
		int dp[300][60]= {0};                          //第i时刻j车站还需的等待时间
		bool has_train[300][60][2]= {0};               //判断在i时刻j车站是否有向右或向左的车
		for(int i=1; i>t[i];
		int x,ti;
		cin>>x;
		for(int i=0; i>ti;
			for(int j=0; j>x;
		for(int i=0; i>ti;
			for(int j=n; j>0; j--) {
				ti=ti+t[j];
				has_train[ti][j][1]=1;
			}
		}
		for(int i=1; i=0; i--)                            //核心算法
			for(int j=1; j<=n; j++) {
				dp[i][j]=dp[i+1][j]+1;
				if(j1&&has_train[i][j][1]&&i+t[j-1]<=T)
					dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);
			}
		cout<<"Case Number "<=INF)
			cout<<"impossible\n";
		else
			cout<

                       

你可能感兴趣的:(动态规划,ACMICPC,动态规划,UVa1025)