瑶瑶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; }
原文地址:https://www.cnblogs.com/ocac/p/11130973.html