大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
蓝桥杯省一你一定不能错过的模板大全(第三期)
蓝桥杯省一你一定不能错过的模板大全(第四期)!!!
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日N题 第一期(一)!!!
蓝桥杯上岸每日N题第一期(二)!!!
蓝桥杯上岸每日N题第一期(三)!!!
蓝桥杯上岸每日N题第二期(一)!!!
蓝桥杯上岸每日N题第三期(一)!!!
蓝桥杯上岸每日N题 第四期(最少刷题数)!!!
蓝桥杯上岸每日N题 第五期(山)!!!
蓝桥杯上岸每日N题 第六期(求阶乘)!!!
蓝桥杯上岸每日N题 第七期(小猫爬山)!!!
蓝桥杯上岸每日N题 第八期 (全球变暖)!!!
蓝桥杯每日N题 (消灭老鼠)
蓝桥杯每日N题(杨辉三角形)
蓝桥杯每日N题 (砝码称重)
操作系统期末题库 第九期(完结)
LeetCode Hot100 刷题(第三期)
idea创建SpringBoot项目报错解决方案
数据库SQL语句(期末冲刺)
想看JavaB组填空题的伙伴们点点下方 👇
填空题
竞赛干货
算法竞赛字符串常用操作大全
蓝桥杯上岸必刷!!!(模拟/枚举专题)
蓝桥杯上岸必背!!! (第三期 DP)
蓝桥杯上岸必背!!!(第四期DFS)
蓝桥杯上岸必背!!!(第五期BFS)
蓝桥杯上岸必背!!!(第六期树与图的遍历)
蓝桥杯上岸必背!!!(第七期 最短路算法)
蓝桥杯上岸必背!!!(第八期 简单数论)
蓝桥杯上岸必刷!!!(进制、数位专题)
蓝桥杯上岸考点清单 (冲刺版)!!!
蓝桥杯上岸必背模板 (纯享版)
题目描述
分析
要求的是通过所以关卡所获得的最大可能值
所以就存在第一个讨论:
(1)是先做普通的关卡再做特殊的关卡
(2)还是先做特殊的关卡再做普通的关卡
很明显用(1)的做法会大于(2),即先做普通的关卡再做特殊的关卡。
综上,得出是做(1)的结论后,我们再讨论另一个问题
是升序去处理特殊关卡来做
还是降序去处理特殊关卡来做
可以得出,是降序情况来做会更好,降序即先将大的数字加起来,再将小的加起来,优先考虑加大的数,所以需要降序去处理。
这样确保处理后的值是最大值,由于先做普通的再去做特殊的可以将特殊的数覆盖掉,是两倍的基数,这样处理确保的是最大值。有点类似滚雪球,尽可能确保滚到的雪球较大。
ACcode
import java.util.*;
public class Main{
public static void main(String []args){
Scanner in =new Scanner(System.in);
//比较器排序
Queue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
int arr[]=new int[110];
boolean st[]=new boolean[110];
int n=in.nextInt();
int m=in.nextInt();
for(int i=1;i<=n;i++)arr[i]=in.nextInt();
for(int i=1;i<=m;i++){
int a=in.nextInt();
st[a]=true;
queue.add(arr[a]);
}
long res=0;
for(int i=1;i<=n;i++){
if(!st[i])res+=arr[i];
}
while(!queue.isEmpty()){
int x=queue.poll();
//排完序的queue依次出队
if(res>=x)res*=2;
else res=res+x;
}
System.out.println(res);
}
}