提交时间:2024-05-13 14:00:24
运行 ID: 146681
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define ll long long #define pq priority_queue #define mp make_pair #define pii pair<int,int> #define mod 998244353 #define debug(x) cerr<<#x<<"="<<x<<'\n' int lowbit(int x) {return x&(-x);} int n,m,k; const int maxn=1e4+10,maxm=1e3+10; const int INF=1e9+11; int x[maxn],y[maxn]; int f[maxn][maxm]; int g[maxm]; int l[maxn],r[maxn]; bool pipe[maxn]; int main(){ scanf("%d%d%d",&n,&m,&k); for (int i=0;i<=n;i++) l[i]=0,r[i]=m+1; for (int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); for (int i=0;i<k;i++) { int p; scanf("%d",&p); pipe[p]=true; scanf("%d%d",&l[p],&r[p]); } int cnt=0,ans=INF; for (int i=0;i<=n;i++) { for (int j=0;j<=m;j++) f[i][j]=(i==0?0:INF); bool ok=false; if (i) { for (int j=1;j<=m;j++) { if (j-x[i-1]>0) g[j]=min(f[i-1][j-x[i-1]],g[j-x[i-1]])+1; else g[j]=INF; if (j==m) { for (int k=j;k>=max(0,j-x[i-1]);k--) { g[j]=min(g[j],min(g[k],f[i-1][k])+1); } } } for (int j=l[i]+1;j<r[i];j++) { if (j+y[i-1]<=m) f[i][j]=f[i-1][j+y[i-1]]; f[i][j]=min(f[i][j],g[j]); if (f[i][j]!=INF) ok=true; if (i==n) ans=min(ans,f[i][j]); } } if (!ok&&i>0) { break; } else if (pipe[i]) cnt++; } if (ans==INF) cout<<0<<endl<<cnt<<endl; else cout<<1<<endl<<ans<<endl; return 0; }