同求
```
#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