import java.util.Scanner;
/*
* UVa 624 CD
* */
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int t = scanner.nextInt();
int[] w = new int[t + 5];
for (int i = 1; i <= t; i++)
w[i] = scanner.nextInt();
int[][] f = new int[t + 5][n + 5];
int[][] max = new int[t + 2][n + 1];
for (int i = t; i >= 1; i--) {
for (int j = 0; j <= n; j++) {
f[i][j] = (i == t ? 0 : f[i + 1][j]);
if (j >= w[i]) {
if (f[i][j] <= f[i + 1][j - w[i]] + w[i]) {
// 取等号 as short unused space as possible
f[i][j] = f[i + 1][j - w[i]] + w[i];
max[i][j] = 1;
}
}
}
}
int m = f[1][n];
int i = 1, j = n;
while (m > 0) {
if (max[i][j] == 1) {
System.out.printf("%d ", w[i]);
m -= w[i];
j -= w[i];
i++;
} else {
i++;
}
}
System.out.println("sum:" + f[1][n]);
}
}
}
UVa 624 CD
最新推荐文章于 2022-03-13 19:01:44 发布