E1. Reading Books (easy version)(貪心)

E1. Reading Books (easy version)(貪心)

傳送門

思路:貪心。

有四種類型物品:

1.兩個人都能拿。

2.只有AA能拿。

3.只有BB能拿。

4.都不能拿。

顯然第4種不用考慮。

顯然根據貪心思想,最優解肯定是ABA和B剛好拿kk個。

所以考慮將類型2,32,3轉換爲11做。

分別將2,32,3類型排序,然後每次取最小的爲一組加入到類型11中。

再對類型11排序,選前kk個即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first 
#define se second
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	vector<int>s,a,b;
	for(int i=1;i<=n;i++){
		int t,x,y;
		scanf("%d%d%d",&t,&x,&y);
		if(x&&y) s.push_back(t);
		else if(x) a.push_back(t);
		else if(y) b.push_back(t);
	}
	sort(a.begin(),a.end());
	sort(b.begin(),b.end());
	for(int i=0;i<min(a.size(),b.size());i++)
		s.push_back(a[i]+b[i]);
	if(s.size()<k) puts("-1");
	else {
		sort(s.begin(),s.end());
		ll ans=0;
		for(int i=0;i<k;i++) ans+=s[i];
		printf("%lld\n",ans);
 	} 
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章