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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章