求助
查看原帖
求助
676569
WoodReal12楼主2023/12/14 20:34
#include <iostream>
#include <algorithm>
using namespace std;
int n,m; 
int cnt=0,ans=0;
struct guantou{
	int op;//0拉环罐头,1普通罐头
	int happy;
}a[200005];
int kaipingqi[200005],cnt1=0;
bool cmp(guantou x,guantou y){
	return x.happy>y.happy;
}
bool cmp1(int x,int y){
	return x>y;
}
bool chk(){
	for(int i=1;i<=cnt1;i++)
		if(kaipingqi[i]>0)
			return true;
	return false;
}
bool f[200005];
void work(){
	for(int i=1;i<=cnt1;i++)
		if(kaipingqi[i]>0){
			kaipingqi[i]--;
			if(f[i]==false)
				f[i]=true,m--;
			return ;
		}
			
}
int main(){
	cin>>n>>m;
	for(int i=1,op,x;i<=n;i++){
		cin>>op>>x;
		if(op==0){
			cnt++;
			a[cnt].op=0,a[cnt].happy=x;
		}
			
		else if(op==1){
			cnt++;
			a[cnt].op=1,a[cnt].happy=x;
		}
			
		else{
			cnt1++;
			kaipingqi[cnt1]=x;
		}
	}
	sort(a+1,a+n+1,cmp);
	sort(kaipingqi+1,kaipingqi+n+1,cmp1);
	for(int i=1;i<=cnt;i++){
		if(m<=0)
			break;
		if(a[i].op==0){
			ans+=a[i].happy,m--;
		}
			
		if(a[i].op==1&&chk()){
			ans+=a[i].happy;
			work();
			m--;
		}
			
	}
	cout<<ans<<endl;
	return 0;
}

代码求调

2023/12/14 20:34
加载中...