75pts求调
查看原帖
75pts求调
759098
tangzirui1016楼主2025/8/30 21:20
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5,INF=1e9;
int n,m,k;
int l[N],r[N],cnt[N],x[N],y[N];
int dp[2][N],sum,minn;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i];
		l[i]=1,r[i]=m;
	}
	for(int i=1,p,a,b;i<=k;i++){
		cin>>p>>a>>b;
		l[p]=a+1,r[p]=b-1;
		cnt[p]++;
	}
	for(int j=1;j<=m;j++) dp[0][j]=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++) dp[i&1][j]=INF;
		for(int j=x[i]+1;j<m;j++){
			dp[i&1][j]=min({dp[i&1][j],dp[i-1&1][j-x[i]]+1,dp[i&1][j-x[i]]+1});
		}
		for(int j=max(1, m-x[i]);j<m;j++){
			dp[i&1][m]=min({dp[i&1][m],dp[i-1&1][j]+1,dp[i&1][j]+1});
		}
		for(int j=1;j<=m-y[i];j++){
			dp[i&1][j]=min(dp[i&1][j],dp[i-1&1][j+y[i]]);
		}
		minn=INF;
		for(int j=l[i];j<=r[i];j++) minn=min(minn,dp[i&1][j]);
		for(int j=1;j<l[i];j++) dp[i&1][j]=INF;
		for(int j=r[i]+1;j<=m;j++) dp[i&1][j]=INF;
		if(minn>=INF){
			cout<<"0\n"<<sum;
			return 0;
		}
		sum+=cnt[i];
	}
	cout<<"1\n"<<minn;
	return 0;
}
2025/8/30 21:20
加载中...