CF1914C Quests

2023-12-28 13:17:56

题目描述

n n n 个任务,在完成 i i i 任务时, i i i 之前的所有任务都必须完成。同时,可以多次完成某个任务。总共可以做 k k k 次任务,第一次完成 i i i 任务的贡献为 a i a_i ai? ,后面完成 i i i 任务的贡献为 b i b_i bi? ,求最大贡献。

分析

很容易得出,如果要重复做,那么肯定一直做能做的中最大的,所以我们可以枚举第一次做任务,和重复做任务的分界点,前 i i i 次每次做新任务,后 k ? i k-i k?i 次每次做重复的任务。

可以证明其正确性。

代码

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 2 * 1e5 + 5;
int T, n, k;
struct node{
  int a, b;
}arr[N];

signed main(){
  for(cin >> T; T; T --){
    cin >> n >> k;
    for(int i = 1; i <= n; i ++){
      cin >> arr[i].a;
    }
    for(int i = 1; i <= n; i ++){
      cin >> arr[i].b;
    }
    int maxn = -1e9, ans = 0, sum = 0;
    for(int i = 1; i <= min(n, k); i ++){
      maxn = max(maxn, arr[i].b);
      sum += arr[i].a;
      ans = max(ans, sum + (k - i) * maxn);
    }
    cout << ans << "\n";
  }
}

文章来源:https://blog.csdn.net/zc2000911/article/details/135263727
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。