POJ 2709

原理

不知道是啥,网上说是贪心,应该是贪心,每次找最小的3个值。我这方法有点取巧了,可以看看别的大神的解答。

题意

已知: x毫升灰色颜料需要任何3种颜色各x毫升配出,一套颜料为各颜料数为50毫升(除灰色)(每一套有多少颜色的颜料由n决定)。
输入: n个颜料数, m 1 m_1 m1 m n m_n mn为所需要的对应颜色颜料数,G为所需要的灰色颜料数。
输出: 所需要的最少的颜料套数。

实现

#include <iostream>
#include <queue>

using namespace std;

const int maxn = 20;
int N;
int color[maxn];
int G;

int main(){
	while (cin >> N && N != 0){
		
		priority_queue<int, vector<int>, greater<int> > queue;
		while (!queue.empty()){
			//result = queue.top();
			queue.pop();
		}
			
		for (int i=1; i<=N; i++){
			cin >> color[i];
			queue.push(color[i]);
		}
		cin >> G;
		
		while (G--){
			int tmp1 = queue.top();
			queue.pop();
			int tmp2 = queue.top();
			queue.pop();
			int tmp3 = queue.top();
			queue.pop();
			queue.push(tmp1+1);
			queue.push(tmp2+1);
			queue.push(tmp3+1);
		}
		
		
		int result = 0;
		//cout << "test\n";
		while (!queue.empty()){
			result = queue.top();
			//cout << result << endl;
			queue.pop();
		}
		//cout << "\ntest";
		
		if (result%50 == 0) cout << result/50 << endl;
		else cout << result/50 + 1 << endl;
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值