信息学奥赛一本通 4171. 智力大冲浪
原题链接
简单
作者:
鸡算坤低脚
,
2024-11-14 12:50:49
,
所有人可见
,
阅读 1
java 代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int m=scan.nextInt();
int n=scan.nextInt();
int[][] plays=new int[n][3];//plays[0]——时间编号,plays[1]——截至时间,plays[2]——超出截至时间的扣钱代价
int[] time=new int[n+1];//记录截至时间编号的位置
int s=0;
for (int i = 0; i < n; i++) {
plays[i][1]=scan.nextInt();
}
for (int i = 0; i < n; i++) {
plays[i][2]=scan.nextInt();
s+=plays[i][2];
}
Arrays.sort(plays,(x,y)->{//自定义排序
return y[2]-x[2];
});
for (int i = 0; i < n; i++) {
plays[i][0]=i+1;
}
for (int i = 0; i < plays.length; i++) {
int j=plays[i][1];
while(time[j]!=0) {
j--;
if(j<1) {
break;
}
}
if(j>=1) {
time[j]=plays[i][0];
}
}
int sum=0;//在规定时间内完成的游戏代价总和
for (int i = 1; i< time.length; i++) {
if(time[i]!=0) {
sum+=plays[time[i]-1][2];
}
}
System.out.println(m-(s-sum));
}
}