Codeforces-413C Jeopardy!

mac2024-10-17  50

Codeforces-413C Jeopardy!

题目链接:Codeforces-413C 题目大意:给出一堆积分 其中一些积分可以放弃来将当前你所积累的积分翻倍,问你如何搭配能让你的积分达到最大

解题思路:可翻倍的与不可翻倍的积分都从小到大排序,可翻倍的相加求和,不可相加的与和比较 大于和的话就选择直接加,不大于和的话就选择乘2倍

代码块:

#include<iostream> #include<cstdio> #include<vector> #include<algorithm> using namespace std; typedef long long ll; vector<ll> vectorA; vector<ll> vectorB; bool com(ll x, ll y){ return x > y; } int main(){ int m, n; cin>>n>>m; int mm = m, nn = n; while(n--){ ll a; cin>>a; vectorA.push_back(a); } while(m--){ ll a; cin>>a; vectorB.push_back(vectorA[a - 1]); vectorA[a - 1] = 0; } sort(vectorA.begin(), vectorA.end(), com); sort(vectorB.begin(), vectorB.end(), com); ll sum = 0; for(int i = 0; i < nn - mm; i++){ sum += vectorA[i]; } for(int i = 0; i < mm; i++){ if(vectorB[i] > sum){ sum += vectorB[i]; }else{ sum *= 2; } } cout<<sum; return 0; }
最新回复(0)