为什么样例全过了但是sub1都没全过(我是fw
查看原帖
为什么样例全过了但是sub1都没全过(我是fw
678221
Rtaaa楼主2024/7/14 17:38
#include<bits/stdc++.h>
using namespace std;
struct node{
	int zongk,zongsum;
}zong[114514];
struct node1{
	int l,r,w;
}f[1145];//red strings
int n,m,k,zongi,dp[1145],L[1145],R[1145];//L,R blue strings
bool bookblue[1145];
int cmp(node1 x,node1 y){
	return x.w<y.w;
}
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&f[i].l,&f[i].r,&f[i].w);
	}
	sort(f+1,f+n+1,cmp);//按照w的顺序从小到大排序 
	for(int i=1;i<=m;i++){
		scanf("%d%d",&L[i],&R[i]);
	}
	for(int i=1;i<=n;i++){
		int jiao=0,jiaosum[1145]={0};
		for(int j=1;j<=m;j++){
			if(max(f[i].l,L[j])<=min(f[i].r,R[j])&&bookblue[j]==0){//if 这条蓝的没被用过并且与红的重叠 
				jiao++;//交点++ 
				jiaosum[jiao]=min(f[i].r,R[j])-max(f[i].l,L[j])+1;
				bookblue[j]=1;
			}
		}
		if(jiao!=0){
			sort(jiaosum+1,jiaosum+jiao+1);
			zong[++zongi].zongsum=jiaosum[jiao];
			zong[zongi].zongk=f[i].w;
		}
	}
	//01bag
	for(int i=1;i<=zongi;i++){
		for(int j=k;j>=zong[i].zongk;j--){
			dp[j]=max(dp[j],dp[j-zong[i].zongk]+zong[i].zongsum);
		}
	}
	cout<<dp[k]<<endl;
	for(int i=1;i<=zongi;i++){
		cout<<zong[i].zongsum<<" "<<zong[i].zongk<<endl;
	}
}
2024/7/14 17:38
加载中...