好吧,做例题总是这样,莫名其妙的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;
}