跟讨论区的错误点相反...代码时间5h,看不出来了TAT
#include<bits/stdc++.h>
using namespace std;
int f[10005][2005];
int l[10005],h[10005];
int ko[10005];
int ans,ans1=0x3f3f3f3f;
int up[10005],dow[10005];
int main(){
int n,m,k;
cin>>n>>m>>k;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)h[i]=m+1;
for(int i=1;i<=n;i++){
cin>>up[i]>>dow[i];
}
for(int i=1;i<=k;i++){
int p;
scanf("%d",&p);
scanf("%d %d",&l[p],&h[p]);
ko[p]=1;
}
for(int t=0;t<=n;t++){
f[0][t]=0;
ko[t]+=ko[t-1];
}
for(int i=1;i<=n;i++){
for(int j=up[i]+1;j<=m;j++){
if(j==m){
for(int g=m;g>=m-up[i];g--){
f[i][j]=min(f[i-1][g]+1,f[i][j]);
f[i][j]=min(f[i][j],f[i][g]+1);
}
}
f[i][j]=min(f[i][j-up[i]]+1,f[i][j]);
f[i][j]=min(f[i-1][j-up[i]]+1,f[i][j]);
}
for(int j=1;j<=m;j++){
f[i][j]=min(f[i-1][j+dow[i]],f[i][j]);
if(j>l[i]&&j<h[i]&&f[i][j]<0x3f3f3f3f){
ans=i;
if(i==n){
ans1=min(ans1,f[i][j]);
}
}
}
if(ans!=i){
cout<<0<<endl;
cout<<ko[i-1];
return 0;
}
for(int j=0;j<=l[i];j++)
f[i][j]=0x3f3f3f3f;
for(int j=m;j>=h[i];j--)
f[i][j]=0x3f3f3f3f;
}
int ans2=0;
if(ans==n){
cout<<1<<endl<<ans1<<endl;
}
else {
cout<<0<<endl<<ans2<<endl;
}
}