首页 > 代码库 > World Finals 2003 UVA - 1025 A Spy in the Metro(动态规划)

World Finals 2003 UVA - 1025 A Spy in the Metro(动态规划)

  分析:时间是一个天然的序,这个题目中应该决策的只有时间和车站,使用dp[i][j]表示到达i时间,j车站在地上已经等待的最小时间,决策方式有三种,第一种:等待一秒钟转移到dp[i+1][j]的状态,代价为1。第二种:如果可以则向右上车,转移到dp[i+t][j+1],无代价,t为列车行驶时间。第三种与第二种相同。初始状态为dp[0][1] = 0,其他为INF。答案为dp[T][n]。

  代码如下:

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<map>using namespace std;#define N 55#define INF 1e9bool gol[N][N*4],gor[N][N*4];int dp[N*4][N];int main(){    int n,T,t[N],m1,m2,d,e,sum,ans,ca=0;    while(cin>>n && n)    {        cin>>T;        for(int i = 2; i <= n; i++)        {            cin>>t[i];        }        memset(gol,false,sizeof(gol));        memset(gor,false,sizeof(gor));        cin>>m1;        for(int i = 0; i < m1; i++)        {            cin>>d;            gor[1][d] = true;            sum = d;            for(int j = 2; j <= n; j++)            {                sum += t[j];                gor[j][sum] = true;            }        }        cin>>m2;        for(int i = 0; i < m2; i++)        {            cin>>d;            gol[n][d] = true;            sum = d;            for(int j = n-1; j >= 1; j--)            {                sum += t[j+1];                gol[j][sum] = true;            }        }        for(int i = 0; i <= T; i++)        {            for(int j = 1; j <= n; j++)            {                dp[i][j] = INF;            }        }        dp[0][1] = 0;        for(int i = 0; i <= T; i++)        {            for(int j = 1; j <= n; j++)            {                if(i+1 <= T) dp[i+1][j] = min(dp[i][j]+1,dp[i+1][j]);                if(j+1<=n&&gor[j][i]&&i+t[j+1]<=T)dp[i+t[j+1]][j+1]=min(dp[i+t[j+1]][j+1],dp[i][j]);                if(j-1>=1&&gol[j][i]&&i+t[j]<=T)dp[i+t[j]][j-1]=min(dp[i+t[j]][j-1],dp[i][j]);            }        }        printf("Case Number %d: ",++ca);        if(dp[T][n] >= INF) ans = -1;        else ans = dp[T][n];        if(ans == -1) printf("impossible\n");        else printf("%d\n",ans);    }    return 0;}

 

World Finals 2003 UVA - 1025 A Spy in the Metro(动态规划)