1 条题解
-
1
import java.util.Arrays; import java.util.Scanner;
public class Main {
public static void main(String[] args) { Scanner sc = new Scanner(System.in); //思路:两个数组,一个装总的一个装可翻倍的 int n=sc.nextInt(); int m=sc.nextInt(); int []t=new int[n+1]; //读入 for(int i=1;i<=n;i++)t[i]=sc.nextInt(); boolean[]flag=new boolean[n+1]; for(int i=0;i<m;i++) {//标记哪些是可翻倍的 flag[sc.nextInt()]=true; } int[]yes=new int[m]; long sum=0; int j=0; for(int i=1;i<=n;i++) {//挑选可以翻倍的 if(flag[i])yes[j++]=t[i]; else sum+=t[i];//j是yes 数组的存储角标 } Arrays.sort(yes); j--; while(j>=0) {//从大到小枚举 if(yes[j]>sum)sum+=yes[j];//sum+sum和sum+yes[i]选 else sum*=2; j--; } System.out.println(sum); sc.close(); }}
信息
- ID
- 157
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 718
- 已通过
- 114
- 上传者