华为OD机试-云短信平台优惠活动-完全背包(JAVA 2024E卷)
public class My {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();int maxNum = Integer.parseInt(str);String line = sc.nextLine();String[] strings = line.split(" ");int n = strings.length;//要考虑到物品0的情况,物品0的重量和价值都是0int[] values = new int[n + 1];for (int i = 1; i <= n; i++) {values[i] = Integer.parseInt(strings[i - 1]);}int[] wight = new int[n + 1];for (int i = 0; i < wight.length; i++) {wight[i] = i;}int[][] dp = new int[n + 1][maxNum + 1];for (int i = 1; i <= n; i++) {//物品数量for (int j = 1; j <= maxNum; j++) {//重量if (j < wight[i]) {//当前物品重量大于当前背包重量,不放入物品dp[i][j] = dp[i - 1][j];}else {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - wight[i]] + values[i]);}}}System.out.println(dp[n][maxNum]);}}