链接:桃飘火焰焰,梨堕雪漠漠
来源:牛客网
题目描述
在某游戏平台打折之际,EternityEternityEternity兴致勃勃地在该游戏平台上购买了nnn个不同的游戏,从1到nnn编号。
通过游览游戏论坛EternityEternityEternity确定了完成每个游戏的准确时间并在这nnn个游戏中找到了mmm个特别喜欢的游戏,这些游戏有个共同的特点,那就是都和火焰元素、雪元素相关!这让EternityEternityEternity爱不释手,这意味着EternityEternityEternity将必须去完成这mmm个游戏。
但是当EternityEternityEternity准备玩游戏时,EternityEternityEternity发现快要期末考试了,EternityEternityEternity需要忙着期末复习,但是EntityEntityEntity又经受不住游戏的诱惑,所以EternityEternityEternity决定抽出部分时间去玩至少kkk个游戏。但是EternityEternityEternity忙于玩游戏,所以请你求出EternityEternityEternity最少的游戏时间。
输入描述:
输出描述:
输出一行一个整数代表Eternity最少的游戏时间。
示例1
输入
5 2 3
1 2 3 4 5
2 4
输出
7
说明
Eternity很喜欢编号为2,4的游戏,他会花费2+4 = 6的时间先完成这两个游戏,完成这两个游戏过后,kkk - 2 = 1,所以只需要完成编号为1的游戏就能到达至少kkk个游戏的目标,所以总共花的时间为6 + 1 = 7。
解题思路
首先我们知道Eternity最喜欢的游戏是必须玩的,所以我们先把他最喜欢游戏的时间加到总时间中。
之后在其他的游戏中贪心地选择时间最少地游戏即可。
那怎么避免我们在贪心选择时选择到必须玩地游戏呢?
我这里是在必须玩的游戏加到总时间之后,将它的时间变为 Integer.MAX_VALUE,这样确保不会再次选择到这个游戏。
Java代码实现
import java.util.Arrays;
import java.util.Scanner;
/**
* Main
*
* @author Beau Wang
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int k = scanner.nextInt();
int[] games = new int[n];
for (int i = 0; i < games.length; i++) {
games[i] = scanner.nextInt();
}
int[] likes = new int[m];
for (int i = 0; i < likes.length; i++) {
likes[i] = scanner.nextInt();
}
int time = 0;
for (int j : likes) {
time += games[j - 1];
games[j - 1] = Integer.MAX_VALUE;
}
Arrays.sort(games);
for (int i = 0; i < (k - m); i++) {
time += games[i];
}
System.out.println(time);
}
}
喜欢点个关注吧~