您的位置:首页 > 其它

Codeforces Round #273 (Div. 2) C.Table Decorations 贪心

2015-07-14 15:19 239 查看
思路:每个桌子的三个气球只有两种情况:1 + 1 + 1或者 2 + 1

使用贪心的策略,每次使用2 + 1的放法。

先将三种气球按数量排序,不失一般性,令r, g, b的数目有


所以基本放法是:bb + (r / g)。所以按照2 +1的策略放,到最后有两种情况:①r和g无剩余;②r,g有剩余;

① r和g无剩余

,此时只有b剩余,不能装饰新的桌子,故解为


② r,g有剩余

,此时r和g有剩余(b也可能有剩余,需要考虑)

则首先根据2 + 1的原则,用bb + (r/g)来放置,直到b小于2,剩余的r和g也按照2 + 1放置。

下面证明两种颜色的球至多可以装饰

张桌子。

令r球有a个,g球有b个,有x张桌子为rrb,y张桌子为bbr,则:






1)b球无剩余,则令

,解为



2)b球剩余1个

i. 若

。则最后还剩余两个r/g,可以与b再装饰一个桌子,解为:


ii. 若

,则r、g球刚好装饰整数张桌子,没有多余,解为:



iii. 若

,则最后余下1个r或g,解为:



综上:

时,最优解为


AC代码如下:

#include <cstdio>
#include <algorithm>
using namespace std;
long long a[3];

int main(){
long long sum = 0;
for(int i = 0; i < 3; i ++)
scanf("%I64d", &a[i]), sum += a[i];
sort(a, a + 3);
if(a[0] + a[1] <= a[2] / 2)
printf("%I64d\n", sum - a[2]);
else
printf("%I64d\n", sum / 3);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: