题目
示例1
输入:
10 2
1 1 2
120 20
90 10
输出:
540
说明:总共10天,路上经过2座城市。
路上共花1+1+2=4天。
剩余6天最好的计划是在第一座城市待3天,在第二座城市待3天。
在第一座城市赚的钱: 120+100+80= 300.
在第二座城市赚的钱: 90+80+70 =240.
一共300 + 240 = 540。
题解
public class 贪心歌手 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
int N = in.nextInt();
int showDay = T;
for (int i = 0; i <= N; i++) {
showDay -= in.nextInt();
}
int[][] city = new int[N][N];
for (int i = 0; i < N; i++) {
city[i][0] = in.nextInt();
city[i][1] = in.nextInt();
}
int income = 0;
for (int i = 0; i < showDay; i++) {
int dayIncome = city[0][0];
int cityIndex = 0;
for (int j = 1; j < N; j++) {
if (dayIncome < city[j][0]) {
dayIncome = city[j][0];
cityIndex = i;
}
}
income += dayIncome;
city[cityIndex][0] = Math.max(city[cityIndex][0] - city[cityIndex][1], 0);
}
System.out.println(income);
}
}
参考
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int totalDays = scanner.nextInt();
int cityCount = scanner.nextInt();
int wastedDays = 0;
for (int i = 0; i < cityCount+1; i++) {
wastedDays += scanner.nextInt();
}
int restDays = totalDays - wastedDays;
//0 income 1 decrease
int[][] cities = new int[cityCount][2];
for (int i = 0; i < cityCount; i++) {
cities[i][0] = scanner.nextInt();
cities[i][1] = scanner.nextInt();
}
int i = doSum(restDays, cities);
System.out.println(i);
}
//greedy , never actually wrote
private static int doSum(int restDays, int[][] cities) {
if (restDays == 0 || cities.length == 0) {
return 0;
}
int income=0;
for (int i = 0; i < restDays; i++) {
int todayIncome = getTodayIncome(cities);
income += todayIncome;
}
return income;
}
private static int getTodayIncome(int[][] cities) {
int income = cities[0][0];
int city = 0;
for (int i = 1; i < cities.length; i++) {
if (cities[i][0] > income) {
income = cities[i][0];
city = i;
}
}
if (income <= 0) {
return 0;
}
cities[city][0] -= cities[city][1];
return income;
}
}
https://blog.csdn.net/weixin_52908342/article/details/136198420