紫书uva1025 A Spy in the Metro(dp)

难受啊,dp的时候多写了else,傻了,站台肯定有可能同时左右方向一起来车啊

 has_train[i][j][],第i分钟,j站台,是否有向右(0)/向左(1)开的车
dp[i][j],第i分钟,在j站台最少还需要等候多长时间

三种状态

1.等一分钟

2.接下来向右开

3.接下来向左开

代码已AC

vjudge uva1025

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int n,T,t[60],m1,d[60],m2,e[60],cnt;
int dp[220][60];
int has_train[220][60][2];
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        cnt++;
        memset(has_train,0,sizeof(has_train));
        for(int i=0;i<220;i++)
            for(int j=0;j<60;j++)
                dp[i][j]=inf;
        scanf("%d",&T);
        for(int i=1;i<n;i++)
            scanf("%d",&t[i]);
        scanf("%d",&m1);//向右开
        for(int i=0;i<m1;i++)
        {
             scanf("%d",&d[i]);
             int s=d[i];
             has_train[s][1][0]=1;
             for(int j=1;j<n;j++)
             {
                 s+=t[j];
                 has_train[s][j+1][0]=1;
             }
        }

        scanf("%d",&m2);//向左开
        for(int i=0;i<m2;i++)
        {
             scanf("%d",&e[i]);
             int s=e[i];
             has_train[s][n][1]=1;
             for(int j=n-1;j>=1;j--)
             {
                 s+=t[j];
                 has_train[s][j][1]=1;
             }
        }

        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((i+t[j])<=T&&j<n&&has_train[i][j][0])//i分钟,j站台,之后向右走
                    dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]);
                 if((i+t[j-1])<=T&&j>1&&has_train[i][j][1])
                    dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);

            }
//            for(int j=1;j<=n;j++)
//                printf("%d ",dp[i][j]);
//            printf("\n");
        }
        printf("Case Number %d: ",cnt);
        if(dp[0][1]<inf)
            printf("%d\n",dp[0][1]);
        else
            printf("impossible\n");
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41758381/article/details/84590896
今日推荐