P1077 摆花

时间:2020-03-23
本文章向大家介绍P1077 摆花,主要包括P1077 摆花使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题意:给出n种不同的花,给出最大的摆放数量m,给出不同的花的数量

     问:不同摆放的方案数;

思路:dp【i】【j】表示放置前i种不同的花,在摆放j数量时的方案数

      那么我们就是从前1种到前n种依次遍历

        在遍历的时候再来一维 表示在摆放前i种花时,摆放j数量的方案数的枚举更新

          第三维:枚举的时候只能枚举当前花的最大数量范围内,但是有可能最大数量超过j所以min(j,a[i])

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=105;
 4 const int mod=1000007;
 5 int a[maxn];
 6 int dp[maxn][maxn];
 7 int main()
 8 {
 9     int n,m;
10     scanf("%d%d",&n,&m);
11     for(int i=1;i<=n;i++) 
12         scanf("%d",&a[i]);
13     dp[0][0]=1;
14     for(int i=1;i<=n;i++)
15        for(int j=0;j<=m;j++)
16            for(int k=0;k<=min(j,a[i]);k++)
17               dp[i][j]=(dp[i][j]+dp[i-1][j-k])%mod;
18     printf("%d\n",dp[n][m]);
19     return 0;
20 }
View Code

原文地址:https://www.cnblogs.com/pangbi/p/12555080.html