正文

题意:

给 n 个关卡,每个关卡得分为 ai,有 m 次机会可以选择一

个关卡通过后不得分,而将现有得分翻倍

你可以安排关卡的通过顺序和策略,求最大得分.


分析:

看到这道题首先想到的就是贪心,贪心不仅是最好想也是最好写的。

  • 开始我们可以确定的是,如果有个关卡不能翻倍,那你只能把他的分值加上;
  • 另外,我们知道,如果基数越大,那他翻倍后的数就越大,

    这也是贪心的核心所在,如果我们想要更大的值,就要先得到更大的基数再把它翻倍,所以我们应先把所有只能加的数加起来在翻倍(因为题目给定分值不会为负数);
  • 还有,在遇到能翻倍的关卡的时候,也要判断一下到底是翻倍后得的分多还是不翻倍加上当前关卡分得的分多。

知道这些了以后,我们可以写代码了


做法

  • 我这里是一开始把所有关卡的分全都加上,再减去可以翻倍的关卡的分,作为开始的基数;
  • 然后新开一个数组专门存能翻倍的关卡的分,并从大到小排序,还是遵循了先基数大优先的准则,如果把大的放后面,那他能作为基数扩大后面的值的可能性就会变小,所以先放前面并每次比较加上它后的值与翻倍的值,取较大的那个;
  • 注意:我这里本来想用计数器记录翻倍关卡的数量,在排序时按照它的数量排,但是我这里赋值后关卡分值在数组里的分布是不定的,有的会排不到,所以要把所有的数组全排一遍。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 1000010 using namespace std; long long n,m,a[maxn],b[maxn],c[maxn],cnt,ans; int cmp(int x,int y){
return x>y;
} int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
ans+=a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
for(int j=1;j<=n;j++){
if(b[i]==j){
c[j]=a[b[i]];
ans-=a[b[i]];
cnt++;
}
}
}
sort(c+1,c+n+1,cmp);
for(int i=1;i<=cnt;i++){
if(ans*2>=ans+c[i]) ans*=2;
else ans+=c[i];
}
cout<<ans;
return 0;
}

制作不易,若有错请各位指正

CF413C的更多相关文章

  1. 【题解】CF413C Jeopardy!

    \(\color{blue}{Link}\) \(\text{Solution:}\) 首先,显然的策略是把一定不能翻倍的先加进来.继续考虑下一步操作. 考虑\(x,y\)两个可以翻倍的物品,且\(a ...

随机推荐

  1. sql去除重复的几种方法

    所以用这样一句SQL就可以去掉重复项了: select * from msg group by terminal_id; SQL中distinct的用法(四种示例分析) 示例1 select dist ...

  2. 这是一篇SQL注入文章

    目录 注入原理: 1.寻找注入点的方式或注入的地方可能包括. 2.注入点判断方法. 3.注入分类. 数字型: 字符型: 搜索型: XX型(也叫其他型): 4.注入提交方式. 5.注入攻击类型与方式. ...

  3. DML、DDL、DCL

    总体解释:DML(data manipulation language):       它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据 ...

  4. OpenResty 简介

    OpenResty 简介 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台.我们知道开发 Nginx 的模块需要用 C 语言,同时还要熟悉它的源码,成本和门槛比较高.国人 ...

  5. git基础-远程仓库的使用

    远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库. 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以 ...

  6. TCP三次握手(通俗易懂)

    一--导读 前不久中国和外国RPEC协议的签订,标志着东亚自贸区的建立成功.现在韩国和日本要做贸易.日本一直监听着韩国总统的一举一动,但他又不会主动.(服务器的监听状态)只是被动的等着韩国总统先开口. ...

  7. 企业项目迁移go-zero全攻略(一)

    作者:Mikael 最近发现 golang 社区里出了一个新兴的微服务框架.看了一下官方提供的工具真的很好用,只需要定义好 .api 文件模版代码都可以一键生成,只需要关心业务:同时 core 中的工 ...

  8. [分享] 最流行的 10 个 JavaScript 库

    1. Lodash https://github.com/lodash/lodash 一个工具库,用得还蛮多. 2. Chalk https://github.com/chalk/chalk 给终端加 ...

  9. Zju1100 Mondriaan

    题目描述 有一个m行n列的矩阵,用1*2的骨牌(可横放或竖放)完全覆盖,骨牌不能重叠,有多少种不同的覆盖的方法? 你只需要求出覆盖方法总数mod p的值即可. 输入格式 三个整数数n,m,p,m< ...

  10. JAVA获取当前文件路径this.getClass().getResource方法详细讲解

    public class Test { public void run() { // TODO Auto-generated method stub System.out.println(" ...