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

输入 第一行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 代码:

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