Bear and Five Cards题解

题目

Bear and Five Cards

描述

一只小熊Limak在玩一个游戏。他有五张牌。每张卡片上都写有一个数字。每个数字都是一个正整数。

利马克可以丢弃(扔掉)一些牌。他的目标是使写在剩余(未丢弃)卡片上的数字之和最小。

他最多可以丢弃一次两个或三个数字相同的牌。当然,如果不可能选择两张或三张数字相同的牌,他也不会弃牌。

给出五个写在卡片上的数字,你能找到剩余卡片上数字的最小和吗?

输入

输入的唯一一行包含五个整数t1、t2、t3、t4和t5(1≤ti≤100)–写在卡片上的数字。

输出

打印写在剩余卡片上的数字的最小可能的总和。

样例

输入1

7 3 7 3 20

输出1

26

输入2

7 9 3 1 8

输出2

28

输入3

10 10 10 10 10

输出3

20

提示

在第一个例子中,利马克有数字为7、3、7、3和20的牌。利马克可以做以下其中一个。
什么都不做,总和将是7+3+7+3+20=40。 去掉两张数字为7的牌。剩下的总和将是3+3+20=26。
移除两张数字为3的牌。剩下的总和是7+7+20=34。
你被要求最小化总和,所以答案是26。
在第二个例子中,不可能找到两张或三张数字相同的牌。因此,利马克什么也没做,总和是7+9+1+3+8=28。
在第三个例子中,所有的牌都有相同的数字。丢弃任何三张牌都是最佳选择。剩下两个数字的总和是10+10=20。

补充

时间限制 2 秒
内存限制 256 MB
来源 FYOJ

题解

水题一道

模拟题一道
上code!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <bits/stdc++.h>
using namespace std;
int a;
int b[110];
int sum = 0;
int top;
int ans;
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
for (int i = 1; i <= 5; i++){
cin >> a;
b[a]++;
sum += a;
}
top = sum;
for (int i = 100; i >= 0; i--){
ans = top;
if (b[i] >= 3){
ans -= i*3;
} else if (b[i] == 2){
ans -= i*2;
}
sum = min(sum,ans);
}
cout << sum;
return 0;
}

测评结果 通过
分数 100
时间 0 MS
内存 704 KB
语言 C++
代码长度 451

-------------本文结束感谢您的阅读-------------