题解 | #放苹果#**动态规划看不懂,我用递归整了一个
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; import java.util.Set; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static int m = 0; static int n = 0; static int count = 0; static Set<String> set; public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case m = in.nextInt(); n = in.nextInt(); count = 0; set = new HashSet(); for (int i = m; i > 0; i--) { int arr[] = new int[n]; dfs(i, 0, arr); } System.out.println(count); // System.out.println(set); } } private static void dfs(int num, int idx, int[] arr) { if (idx == n) { return; } arr[idx] = num; if (idx >= 1 && arr[idx - 1] < arr[idx]) { return; } int sum = 0; for (int i = 0; i < n; i++) { sum += arr[i]; if (sum == m) { count++; // System.out.println(Arrays.toString(arr)); set.add(Arrays.toString(arr)); return; } } // for (int i = m - sum; i > 0; i--) { for (int i = Math.min(m - sum, num); i > 0; i--) { // if (i<4 && idx ==1) { // System.out.printf("dfs to next: i= %d, idx=%d, arr=%s", i, idx + 1, Arrays.toString(arr)); // System.out.println(); // } dfs(i, idx + 1, arr); if (idx + 1 < n) { arr[idx + 1] = 0; } } } }