CodeForces-478C Table Decorations

#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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值