题目描述:
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 𝑚m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 𝑛n 种花,从 11 到 𝑛n 标号。为了在门口展出更多种花,规定第 𝑖i 种花不能超过 𝑎𝑖ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
代码:
package lanqiao;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //顾客喜欢的花的种类
int m = sc.nextInt(); //花的盆数
int[] a = new int[n + 1];
int[][] f = new int[n + 1][m + 1];
for(int i = 1;i <= n;i ++)
{
a[i] = sc.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;
}
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] %= 1000007;
}
}
}
System.out.println(f[n][m]);
}
}