AcWing 426. 开心的金明-- Java
原题链接
简单
作者:
Jiang锋时刻
,
2021-02-02 16:54:13
,
所有人可见
,
阅读 408
法一 Java 代码
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
int n = sc.nextInt();
int[][] arr = new int[n + 1][money + 1];
for(int i = 1; i <= n; i++) {
int v = sc.nextInt();
int w = sc.nextInt();
for(int j = 0; j <= money; j++) {
arr[i][j] = arr[i - 1][j];
if(j >= v) {
arr[i][j] = Math.max(arr[i][j], arr[i - 1][j - v] + v * w);
}
}
}
System.out.println(arr[n][money]);
}
}
法二: 状态压缩
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
int n = sc.nextInt();
int[] arr = new int[money + 1];
for(int i = 1; i <= n; i++) {
int v = sc.nextInt();
int w = sc.nextInt();
for(int j = money; j >= v; j--) {
arr[j] = Math.max(arr[j], arr[j - v] + v * w);
}
}
System.out.println(arr[money]);
}
}