原理
不知道是啥,网上说是贪心,应该是贪心,每次找最小的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;
}