UVa 624 CD

来源:互联网 发布:山东财经大学网络课程 编辑:程序博客网 时间:2024/05/16 05:51
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 possiblef[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]);}}}

原创粉丝点击