码迷,mamicode.com
首页 > 其他好文 > 详细

OCAC暑期比赛第二场 C题 瑶瑶2356 题解

时间:2019-07-04 11:10:08      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:ace   表示   efi   ++   输出   ORC   codeforce   代码   main   

瑶瑶2356
原题链接:http://codeforces.com/problemset/problem/734/B
【题目描述】
最近瑶瑶在房间里面发现了一个神秘的盒子。
她打开盒子,发现里面存放了若干张卡片,每张卡片上面都有一个数字。
瑶瑶输了一下,卡片上面的数字只有4种数值:2,3,5,6。
并且,她统计了一下,一共有k2张数值为2的卡片,有k3张数值为3的卡片,有k5张数值为5的卡片,有k6张数值为6的卡片。
瑶瑶最喜欢的数字是 32 和 256。所以它发现可以用这些卡片拼成数字 32 或者 256。
拼成数字 32 需要消耗一张数值为2的卡片和一张数值为3的卡片;
拼成数字 256 需要消耗数值为 2、5、6 的卡片各一张。
瑶瑶想要知道,她在只能拼成 32 和 256 的情况下,怎么拼,能够使得 拼成的所有 32 和 256 的和最大。
比如,假设 k2==5, k3==1, k5==3, k6==4,那么在这种情况下,
我们可以拼 3 个 256 和 1 个 32,所得的和为 256+256+256+32=800,这个 800 就是我们能够获得的最大的和。
请你帮助瑶瑶计算一下,使用现有的卡片拼出的若干个 32 和 256 所能够获得的最大的和。
【输入格式】
输入一行包含四个整数,分别表示 k2, k3, k5, k6。(1<=k2,k3,k5,k6<=5*10^6)
【输出格式】
输出一个整数,表示按照题目描述瑶瑶能够用这些卡片拼出的 32 和 256 组成的最大的和。
【样例输入1】
5 1 3 4
【样例输出1】
800
【样例输入2】
1 1 1 1
【样例输出2】
256
【题目分析】
本题涉及算法:贪心。
我们可以看到,拼一个 256 或者 拼一个 32 都会消耗一张数值为 2 的卡片。
但是 256 会比 32 大很多,所以在我还有2,5,6牌的时候,我会选择去拼 256。
只有在我 5 或者 6 没有的时候,我才会去拼 32。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
#define min3(a, b, c) min(a, min(b, c))

int k2, k3, k5, k6, sum, tmp;

int main() {
    cin >> k2 >> k3 >> k5 >> k6;
    tmp = min3(k2, k5, k6);
    sum += tmp * 256;
    k2 -= tmp;
    sum += min(k2, k3) * 32;
    cout << sum << endl;
    return 0;
}

 

OCAC暑期比赛第二场 C题 瑶瑶2356 题解

标签:ace   表示   efi   ++   输出   ORC   codeforce   代码   main   

原文地址:https://www.cnblogs.com/ocac/p/11130973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!