20204年第三场小白赛 怪兽突击 知识点:贪心

164 阅读1分钟

3.怪兽突击【算法赛】 - 蓝桥云课 (lanqiao.cn) image.png

假设当i是3,k是5的时候:

就是说我们假设只打到第3号怪兽: 那么第一轮消耗的能量就是2+3+4=9.

image.png

然后还剩下2次要打,我们打第二轮要在ai+bi里找消耗最小的去打:

我们发现第一只怪兽ai+bi最小,剩下的2次我们全打第一只怪兽:

所以sum总共是9+2*5=19 image.png

code

因为a[i],b[i]最大都是1e5,相加可能爆int,所以要开long long,那么正无穷最大值就不能是0x3f3f3f3f,而应该是0x3f3f3f3f3f3f3f3f,或者是2e18

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
#define int long long
#define INF 0x3f3f3f3f3f3f3f
int a[N], b[N];
int sum = 0;
int res = INF,minn=INF;
signed main()
{
    int n, k; cin >> n >> k;
    for (int i = 1; i <= n; i++)cin >> a[i];
    for (int i = 1; i <= n; i++)cin >> b[i];

    
    for (int i = 1; i <=min(n,k); i++)
    {
        sum += a[i];

        //剩下的打k-i次
        minn = min(minn, a[i] + b[i]);

       res= min(res,sum + (k - i) * minn);
    }

    cout <<res;
    return 0;
}