75pts,求助
查看原帖
75pts,求助
1068071
wangft楼主2025/1/20 14:54
#include<bits/stdc++.h>
using namespace std;
int n,m,k,dp[10010][1010],v[10010][1010],x[10010],y[10010],ans1=1e9,ans2;
int main(){
	int i,j,p,l,h;
	cin>>n>>m>>k;
	for(i=1;i<=n;i++)
	for(j=0;j<=m;j++) dp[i][j]=1e9;
	dp[0][0]=1e9; 
	for(i=0;i<=n;i++) v[i][0]=1;
	for(i=1;i<=n;i++){
		cin>>x[i]>>y[i];
	}
	for(i=1;i<=k;i++){
		cin>>p>>l>>h;
	for(j=1;j<=l;j++) v[p][j]=1;
	for(j=h;j<=m;j++) v[p][j]=1;
	}
	for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	if(v[i][j]==0){
		int o=1;
	    if(j!=m){
	    for(int u=j-x[i];u>=1;u-=x[i]){
		dp[i][j]=min(dp[i][j],dp[i-1][u]+o);
		o++;
	    }
	    }
		else {
		for(int u=m-x[i];u<=m;u++) dp[i][j]=min(dp[i][j],dp[i-1][u]+1);
		for(int u=m-x[i];u>=1;u-=x[i]){
		dp[i][j]=min(dp[i][j],dp[i-1][u]+o);
		o++;
	    }
	    }
		if(j+y[i]<=m)
		dp[i][j]=min(dp[i][j],dp[i-1][j+y[i]]);
		if(dp[i][j]!=1e9) ans2=i;
		if(i==n) ans1=min(ans1,dp[i][j]);
	}
	if(ans2==n)
	cout<<"1\n"<<ans1;
	else {
		int cnt=0;
		for(i=0;i<=ans2;i++)
		if(v[i][m]==1) cnt++;
		cout<<"0\n"<<cnt;
    }
	return 0;
}
2025/1/20 14:54
加载中...