调了2天了...还是WA75 求各位dalao帮忙debug下

P1941 [NOIP2014 提高组] 飞扬的小鸟

同求 ``` #include<iostream> #include<cstdio> using namespace std; const int INF=1<<30; int n,m,k,x[10001],y[10001],p,l[10001],h[10001],b[10001],dp[1001],t,minn=INF,a[1001],aa[1001]; bool boo; int main() { cin>>n>>m>>k; int i,j; for(i=1;i<=n;i++) cin>>x[i]>>y[i]; for(i=1;i<=k;i++) cin>>p>>l[i]>>h[i],b[p]=i; for(i=1;i<=n;i++) if(!b[i]) { for(j=1;j<m;j++) { if(j>x[i])a[j]=dp[j-x[i]]+1,dp[j]=min(dp[j],a[j]); else a[j]=INF; if(j+y[i]<=m)aa[j]=dp[j+y[i]]; else aa[j]=INF; } for(j=max(1,m-x[i]);j<m;j++)dp[m]=min(dp[m],dp[j]); dp[m]++; for(j=1;j<m;j++) { dp[j]=min(a[j],aa[j]); if(dp[j]<INF)boo=1; } } else { boo=0; for(j=l[b[i]]+1;j<h[b[i]];j++) { if(j>x[i])a[j]=dp[j-x[i]]+1,dp[j]=min(dp[j],a[j]); else a[j]=INF; if(j+y[i]<=m)aa[j]=dp[j+y[i]]; else aa[j]=INF; } for(j=l[b[i]]+1;j<h[b[i]];j++) { dp[j]=min(a[j],aa[j]); if(dp[j]<INF)boo=1; } if(!boo){printf("0\n%d\n",t);return 0;} for(j=1;j<=l[b[i]];j++)dp[j]=INF; for(j=h[b[i]];j<=m;j++)dp[j]=INF; t++; } for(i=1;i<=m;i++)if(dp[i]<minn)minn=dp[i]; printf("1\n%d\n",minn); return 0; } ```
by a___ @ 2018-04-17 18:53:35


给你一个建议,先不管他可不可以到达这个位置,在最后统一处理。(我之前也是和你一样的WA) ```cpp bool flag; for(int i=1;i<=n;i++){ flag=0; for(int j=X[i]+1;j<=m+X[i];j++) dp[i][j]=min(dp[i-1][j-X[i]],dp[i][j-X[i]])+1; for(int j=m+1;j<=m+X[i];j++) dp[i][m]=min(dp[i][m],dp[i][j]); for(int j=m-Y[i];j;j--) dp[i][j]=min(dp[i][j],dp[i-1][j+Y[i]]); for(int j=1;j<=m+X[i];j++) if(able[i][j])dp[i][j]=inf; for(int j=1;j<=m;j++)if(dp[i][j]<inf){flag=1;break;} if(!flag){ ... return; } } ```
by ZigZagKmp @ 2018-08-30 13:04:52


@[ZCDHJ](/space/show?uid=24878)
by ZigZagKmp @ 2018-08-30 13:05:09


@[周子凯](/space/show?uid=35871) 谢谢,我已经改好啦
by iodwad @ 2018-08-30 14:00:25


|