1 条题解

  • 1
    @ 2026-4-1 20:04:54

    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
    上传者