算法每一题,成长每一天~
C0E26 查找充电设备组合
真题链接:【持续更新】2024华为 OD 机试E卷 机考真题库清单(全真题库)
思路
Java
import java.util.Scanner;
public class C0E26 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] power = new int[n];
for (int i = 0; i < n; i++) {
power[i] = in.nextInt();
}
int P = in.nextInt();
int[][] dp = new int[n + 1][P + 1];
for (int i = 0; i < n + 1; i++) {
dp[i][0] = 0;
}
for (int i = 1; i < P + 1; i++) {
dp[0][i] = 0;
}
for (int i = 1; i < n + 1; i++) {
int pow = power[i - 1]; // 当前第 i 个的功率
for (int j = 1; j < P + 1; j++) {
if (j >= pow) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - pow] + pow);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
System.out.println(dp[n][P]);
}
}
总结
1、前面有 C0E8-最大报酬 里面讲到常见的 动态规划题型:
- 两个属性、三个变量、资源限制
这题的特殊性在于:充电桩只有一个属性:“功率”。要求 总功率在最大限制范围内,求总功率的最大值。
—— 相当于:受资源限制的 变量,与求解的最大值 变量,是同一个。
算法要多练多练多练!!