Codeforces 976E

Posted 温和的提比略

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 976E相关的知识,希望对你有一定的参考价值。

题意略。

思路:

容易知道那a次倍增放在同一个怪身上是最优的,其余的怪我们只需要取hp值和damage值中间最大的那个就好了(在b值的限制下)。

然而我们并不知道把那a次倍增放在哪个怪身上最好,那么我们就只能一只一只地试。

 

#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
typedef long long LL;

struct node{
    LL hp,dmg;
    node(LL a = 0,LL b = 0){
        hp = a,dmg = b;
    }
};

LL pwr2[30];
node store[maxn];
int n,a,b;

bool cmp(const node& nd1,const node& nd2){
    return (nd1.hp - nd1.dmg) > (nd2.hp - nd2.dmg);
}

int main(){
    scanf("%d%d%d",&n,&a,&b);
    for(int i = 0;i < n;++i) scanf("%lld%lld",&store[i].hp,&store[i].dmg);
    sort(store,store + n,cmp);
    LL sum = 0;
    for(int i = 0;i < n;++i){
        if(i < b) sum += max(store[i].dmg,store[i].hp);
        else sum += store[i].dmg;
    }
    LL ans = sum;
    for(int i = 0;i < b;++i){
        LL tmp = sum;
        tmp -= max(store[i].dmg,store[i].hp);
        tmp += max(store[i].hp<<a,store[i].dmg);
        ans = max(ans,tmp);
    }
    if(b > 0){
        sum -= max(store[b - 1].dmg,store[b - 1].hp);
        sum += store[b - 1].dmg;
        for(int i = b;i < n;++i){
            LL tmp = sum;
            tmp -= store[i].dmg;
            tmp += max(store[i].hp<<a,store[i].dmg);
            ans = max(ans,tmp);
        }
    }
    printf("%lld\n",ans);
    return 0;
}

 

以上是关于Codeforces 976E的主要内容,如果未能解决你的问题,请参考以下文章

CF976E Well played!

cf976e Well played!

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段

c_cpp Codeforces片段

Codeforces 86C Genetic engineering(AC自动机+DP)

CodeForces 1005D Polycarp and Div 3(思维贪心dp)