第一行输入一个整数
表示怪物数。
第二行输入
个整数
表示怪物的生命。
输出一个整数表示小美可以获得最高的经验值。
3 5 3 2
27
第一个怪物选择击败获得
的经验值,第二个怪物选择击败获得
的经验值,第三只怪物选择击败获得
的经验值,总共获得
的经验值。
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] monsters = new int[n];
for (int i = 0; i < n; i++) {
monsters[i] = in.nextInt();
}
System.out.println(solution(monsters));
}
private static long solution(int[] monsters) {
int n = monsters.length;
if (n == 0) return 0;
long max = 0;
long[][] dp = new long[n + 1][10]; // 第二维大小为 n+1
for (int i = 1; i <= n; i++) {
int ai = monsters[i - 1];
for (int j = 0; j <= i && j < 10; j++) {
// 放走第i只获得的总经验
long expSkip = dp[i - 1][j] + i;
// 击杀第i只获得的总经验
long combo = j + 1;
long expGain = dp[i - 1][j - 1 < 0 ? 9 : j - 1] + ai * combo;
dp[i][j] = Math.max(expSkip, expGain);
if (max < dp[i][j]) max = dp[i][j];
}
}
return max;
}
} const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const ins = []
rl.on('line', function (line) {
ins.push(line.trim())
});
rl.on('close', () => {
const n = Number(ins[0])
const a = ins[1].split(' ').map(Number)
let dp = Array(10).fill(0)
for (let i = n - 1; i >= 0; i--) {
const hp = a[i]
const mobId = i + 1
const next = Array(10).fill(0)
for (let r = 0; r < 10; r++) {
// skip
const skip = mobId + dp[r]
// kill
const mult = 1 + ((r + 1) % 10)
const kill = hp * mult + dp[(r + 1) % 10]
next[r] = skip > kill ? skip : kill
}
dp = next
}
console.log(dp[0])
})