package com.company; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt();//采样人数 int b = in.nextInt();//志愿者 List<Persion> list1 =new LinkedList<>(); for (int sc=0;sc<a;sc++) { int dd = in.nextInt(); double res= dd; list1.add(new Persion(res)); } double[] dp =new double[b+1]; dp[0]= culate(list1);//分配0个志愿者时的最大值 for (int i = 1; i <= b; i++) {//分配志愿者个数 double[][] sum=new double[list1.size()][list1.size()]; for (int j = 0; j < list1.size(); j++) { //计算当前分配人员的速率 Persion persion = list1.get(j); if(persion.getPnum()<=3){ //计算此方案的sum和 int pnum = persion.getPnum(); if(pnum==0){//如果为0分配一个人员 sum[j][j]=dp[i-1]+persion.getSpeed()*0.2; } if(pnum==1){ sum[j][j]=dp[i-1]+persion.getSpeed()*0.1; } if(pnum==2){ sum[j][j]=dp[i-1]+persion.getSpeed()*0.2; } if(pnum==3){ sum[j][j]=dp[i-1]+persion.getSpeed()*0.3; } } } //找出最大的J对应的值 就是 dp[i] 的值 double index=0; double max =0; for (int j = 0; j < sum.length; j++) { double temp=sum[j][j]; if (temp>max){ max=temp; index=j; } } dp[i]=max; list1.get((int) index).setPnum(list1.get((int) index).getPnum()+1); } System.out.println((int)dp[b]); } private static double culate(List<Persion> list1) { double sum=0; for (Persion persion : list1) { int pnum = persion.getPnum(); if(pnum==0){ sum=sum+persion.getSpeed()*0.8; } if(pnum==1){ sum=sum+persion.getSpeed(); } if(pnum==2){ sum=sum+persion.getSpeed()*1.1; } if(pnum==3){ sum=sum+persion.getSpeed()*1.2; } if(pnum==4){ sum=sum+persion.getSpeed()*1.3; } } return sum; } static class Persion{ double speed=-1.0; int pnum=0; //最大是4 Persion(double speed){ this.speed=speed; } public double getSpeed() { return speed; } public void setSpeed(double speed) { this.speed = speed; } public int getPnum() { return pnum; } public void setPnum(int pnum) { this.pnum = pnum; } } } ```
我想建一个一个华为机试题的群聊,找工作的朋友可以一起讨论,大家可以一起分享题库