30分求助
查看原帖
30分求助
302584
DottedCalculator楼主2021/7/4 16:23
#include<bits/stdc++.h>
using namespace std;
struct node{
	int p,l,h;
};
bool comp(node a,node b){
	return a.p<b.p;
}
int n,m,k,x[10005],y[10005],a1,b1,c1,d1,ans=9999999,ans2=0;
int screen=0,dp[10005][1005]={0};
node z[10005];
int fun(int a,int b){
	if(b<=0)    return 9999999;
	if(dp[a][b])    return dp[a][b];
	for(int i=0;i<k;i++){
		if(a==z[i].p){
			if(!(b>z[i].l&&b<z[i].h)){
				ans2=max(ans2,i);
				return dp[a][b]=9999999;
			}
			break;  
		}
	}
	if(a==n) {
		return screen;
	}   
	for(int i=0;b+(i-1)*x[a]<=m;i++){
		if(i==0)    ans=min(ans,fun(a+1,b-y[a]));
		else{
			screen+=i;
			ans=min(ans,fun(a+1,min(m,b+i*x[a])));
			screen-=i;
		}    
	}
	return dp[a][b]=ans;
}
int main(){
	cin>>n>>m>>k;
	for(int i=0;i<n;i++)    scanf("%d%d",&x[i],&y[i]);
	for(int i=0;i<k;i++)    scanf("%d%d%d",&z[i].p,&z[i].l,&z[i].h);
	sort(z,z+k,comp);
	for(int i=1;i<=m;i++){
		int t=fun(0,i);
	}
	if(ans!=9999999)    cout<<1<<endl<<ans;
	else    cout<<0<<endl<<ans2;
	return 0;
}
2021/7/4 16:23
加载中...