#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long color[3];
int main()
{
while( ~scanf("%I64d%I64d%I64d", &color[0], &color[1], &color[2])) {
int cnt = 0;
sort( color, color + 3);
if( color[0] * 2 + color[1] * 2 <= color[2])
cnt = (color[0]+color[1]);
else
cnt = (color[0] + color[1] + color[2]) / 3;
cout << cnt << endl;
}
return 0;
}
题意:三种颜色的气球装饰桌面,每桌3只,red green,blue..要求每桌的气球颜色不能完全不同。也就是rrg之类的可以。rrr全同就不可以。求最大组合。
题解:坑了2个小时吧..一开始模拟..觉得可以。不过超时肯定的..(复制)这一题是一道贪心,策略是优先取最小的那堆,然后最大堆拿2个。看到题目数据很大,不可能模拟,所以就从2堆的基础上推出一个公式:当最小的两堆相加乘以2比最大的那堆大时,结果就是3堆相加在整除3,否则就是两堆最小堆的和。(因为每次拿的都是3的倍数,而且最小的两堆并不能在最大的堆被拿完钱拿完,所以结果一定是相加后整除3)