UVA 1025 紫书练习题 动态规划

                  好吧,做例题总是这样,莫名其妙的WA,然后莫名其妙的AC。。。

                  关键的部分紫书上已经说得很清楚了,剩下的就是确定has_train这个数组,我觉得确定这个数组也不是难事吧。。把数据范围看清楚,然后看看有没有什么写错了的小地方,注意一下就就好。

                  还有一件事情就是,我这里的维度和紫书上是反的,我是依靠自己的感觉来写的,用第一维比表示车站,第二维表示时间,特此注明一下。

#include
#include
#include

using namespace std;

int n,T,ca=1,dp[55][220],m1,m2,m1_arr[55],m2_arr[55],t[55];
bool has_train[55][220][2];

int main(){
    while(scanf("%d",&n)&&n){
        scanf("%d",&T);
        for(int i=1;i=1&&add<=T;add+=t[--j])
                has_train[j][add][1]=true;
        }

        for(int i=1;i=0;--i)
        for(int j=1;j<=n;++j){
            dp[j][i]=dp[j][i+1]+1;
            if(j1&&has_train[j][i][1]&&i+t[j-1]<=T)
                dp[j][i]=min(dp[j][i],dp[j-1][i+t[j-1]]);
        }

        printf("Case Number %d: ",ca++);
        if(dp[1][0]>=0x3f3f3f3f)
            printf("impossible\n");
        else
            printf("%d\n",dp[1][0]);

        memset(dp,0,sizeof dp);
        memset(has_train,0,sizeof has_train);
    }
    return 0;
}

你可能感兴趣的:(线性DP)