解题思路:
dp背包问题
注意事项:
关键:非常重要的一点是边界问题的处理,特别是第i种花枚举数量是从1-a[i],不可以从0开始
参考代码:
#include<cstdio> #include<algorithm> using namespace std; const int N = 110; int a[N],dp[N]; int main(void) { //freopen("D:\\input2.txt","r",stdin); int m,n; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dp[0]=1; for(int i=1;i<=n;i++)//枚举花的种类 { for(int j=m;j>=1;j--)//枚举花盆的数量 { for(int k=1;k<=a[i];k++)//枚举第i种花的数量 { if(j>=k) { dp[j]+=dp[j-k]; } } dp[j]%=1000007; } } printf("%d",dp[m]); return 0; }
0.0分
0 人评分
数组输出 (C语言代码)浏览:811 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
C语言程序设计教程(第三版)课后习题9.2 (Java代码)浏览:696 |
上车人数 (C语言代码)浏览:816 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:636 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1110 |
C语言考试练习题_保留字母 (C语言代码)浏览:743 |
打印十字图 (C语言代码)浏览:2820 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:590 |