package 蓝桥杯java算法训练; import java.util.Scanner; public class _5摆花 { //动态规划问题,设f[i][j]是前i种花摆放j盆的方案,则f[i][j]=f[i-1][j-k] public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//n种花 int m = scanner.nextInt();//共m盆 int[] a = new int[n+1]; int[][] f = new int[n+1][m+1] ; for (int i = 1; i <= n; i++) { a[i] = scanner.nextInt(); } //前1种花,摆放a[1]盆就一种方案 for (int i = 1; i <= a[1]; i++) { f[1][i] = 1; } //前i中花,摆放0盆就一种方案 for (int i = 1; i <= n; i++) { f[i][0] = 1; } //前i种花,摆放j盆共f[i][j]=f[i][j]+f[i-1][j-k]种 for (int i = 2; i <= n; i++) { for (int j = 1; j <= m; j++) { for (int k = 0; k <= a[i]&&k<=j; k++) { f[i][j]=f[i][j]+f[i-1][j-k]; f[i][j] = f[i][j] % 1000007; } } } System.out.println(f[n][m]); } }
原文:http://www.cnblogs.com/zhangxue521/p/6325123.html