0%

51nod-2530-最大输出

题目:
给定𝑛个技能,每个技能能打掉对手𝑎𝑖的血,你一共有𝑚次发招的机会,你不能连续使用某一个技能超过𝑘次。问你最多能打掉对手多少血。

输入
第一行3个数n,m,k,(2<=n<=2*10^5 ,1<=m,k<=10^9)
第二行n个数a[1…n],(1<=a[i]<=10^9)
输出
一个数,表示最大值。

输入样例
6 9 2
1 3 3 7 4 2
输出样例
54
解法:
去top2,每次都是top1*k+top2,剩余的不足k就只去top1
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<algorithm>
using namespace std;
int s[200010];
int main()
{
int n,m,k;
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < n; i++)
scanf("%d", &s[i]);
sort(s, s+n);
int s1 = s[n - 1];
int s2 = s[n - 2];
long long p = s1*k + s2;
long long ans = m/(k+1)*p + m%(k+1)*s1;
printf("%lld\n",ans);
}