UVa 1025 例题9-1 城市里的间谍

书上已经分析的很详细了,就不再赘述了。
其中dp[i][j]表示在i时刻在j车站,还需要等待的时间。
train[maxt][maxn][2]表示是否有往左或者往右开的火车

#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=55;
const int maxt=205;
const int INF=1000000000;
int t[maxn],train[maxt][maxn][2];
int dp[maxt][maxn]; 
int main()
{
    int kase=0,n,T;
    while(cin>>n>>T && n){
        int m1,m2,d;
        for(int i=1;i=1;j--){
                if(d<=T)train[d][j+1][1]=1;
                d+=t[j];
            }
        }
        for(int i=1;i=0;i--)
        for(int j=1;j<=n;j++){
            dp[i][j]=dp[i+1][j]+1;
            if(j1&&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 "<<++kase<<": ";
        if(dp[0][1]>=INF)cout<<"impossible\n";
        else cout<


你可能感兴趣的:(————动态规划————,第9章,动态规划初步)