85pts 完全背包求助wa on#3#6#19
查看原帖
85pts 完全背包求助wa on#3#6#19
807042
lovely_aris楼主2024/9/26 17:52
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int in(){
	int ans=0,f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) ans=ans*10+c-'0';
	return ans*f;
}
int n,m,k;
int up[20010],down[20010],l[20010],h[20010];
int f[20010],g[20010];
int main(){
//	freopen("1.in","r",stdin);
	n=in();m=in();k=in();
	for(int i=1;i<=n;i++){
		up[i]=in();
		down[i]=in();
	}
	for(int i=1;i<=k;i++){
		int p=in();
		l[p]=in();
		h[p]=in();
	}
	int flag=1,cnt=0;
	for(int i=1;i<=n;i++){
		flag=0;
		memset(f,0x3f,sizeof(f));
		for(int j=m+up[i];j>=up[i]+1;j--) f[j]=min(f[j],g[j-up[i]]+1);
		for(int j=up[i]+1;j<=m+up[i];j++){
			f[j]=min(f[j],f[j-up[i]]+1);
		}
		for(int j=m+1;j<=m+up[i];j++) f[m]=min(f[m],f[j]);
		for(int j=m-down[i];j>=1;j--) f[j]=min(f[j],g[j+down[i]]);
		if(l[i]){
			cnt++;
			for(int j=m+up[i];j>=h[i];j--) f[j]=inf;
			for(int j=1;j<=l[i];j++) f[j]=inf;
		}
		for(int j=1;j<=m;j++) if(f[j]!=inf) flag=1;
		if(!flag){
			cout<<"0\n"<<cnt-1;
			return 0;
		}
		memcpy(g,f,sizeof(f));
	}
	cout<<"1\n";
	int ans=inf;
	for(int j=1;j<=m;j++) ans=min(ans,f[j]);
	cout<<ans;
	return 0;
}
2024/9/26 17:52
加载中...