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

思路:每个桌子的三个气球只有两种情况: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;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值