正文

题意:

给 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. idea中surround with

    idea中的surround with是把选中的代码块装进一些带有{}的语句中,比如if,try,for等等 快捷键是ctrl+alt+t,先选中代码,再按快捷键,如图

  2. 访问需要HTTP Basic Authentication认证的资源的c#的实现 将账号密码放入url

    string url = ""; string usernamePassword = username + ":" + password; HttpWebReq ...

  3. docker配置mysql实现主从同步问题

    主从同步遇到 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log ...

  4. 【分布式锁的演化】“超卖场景”,MySQL分布式锁篇

    前言 之前的文章中通过电商场景中秒杀的例子和大家分享了单体架构中锁的使用方式,但是现在很多应用系统都是相当庞大的,很多应用系统都是微服务的架构体系,那么在这种跨jvm的场景下,我们又该如何去解决并发. ...

  5. 短信平台开发,G客短信系统功能介绍

    G客短信群发平台功能介绍 支持HTTP 接口 .CMPP SMPP等 这里只有基本功能介绍 联系微信:290615413 QQ:290615413 一:客户端功能 1:首页仪表盘 首页包含 2:发送短 ...

  6. CentOS 7 网卡注释

    TYPE=Ethernet # 网络类型为:EthernetPROXY_METHOD=none # 代理方式:关闭状态BROWSER_ONLY=no # 只是浏览器:否BOOTPROTO=static ...

  7. spring cache 学习 —— @Cacheable 使用详解

    1. 功能说明 @Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的.也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方 ...

  8. Lagom 官方文档之随手记

    引言 Lagom是出品Akka的Lightbend公司推出的一个微服务框架,目前最新版本为1.6.2.Lagom一词出自瑞典语,意为"适量". https://www.lagomf ...

  9. 安装Android Studio遇到的问题

    1. 学习视频 视频链接:https://www.bilibili.com/video/BV1jW411375J?p=2 2. Android Studio1.5.1的下载地址: http://www ...

  10. Itranswarp 搭建个人 Wiki

    www.swack.cn - 原文链接:Itranswarp 搭建个人 Wiki 从零开始 搭建个人Wiki站点 Itranswarp.js 是一款基于nodejs开发的博客系统,通过Apache L ...