洛谷 P1077 [NOIP2012 普及组] 摆花 (DP)
https://www.luogu.com.cn/problem/P1077
题目描述
摆上m盆花。
一共有n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
注意:因为方案数可能很多,请输出方案数对10^6+7取模的结果。
输入 #1
2 4
3 2
输出 #1
2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL N=500200,M=2002;
const LL mod=1e6+7;
LL a[N],f[M][M];
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
//cin>>T;
while(T--)
{
LL n,m;
cin>>n>>m;
for(LL i=1;i<=n;i++)
{
cin>>a[i];//每种花的可以摆放的最大数量
}
f[0][0]=1;
for(LL i=1;i<=n;i++)//每一种花
{
for(LL j=0;j<=m;j++)//总数量的安排
{
for(LL k=0;k<=min(j,a[i]);k++)//当前每一种花可以摆放的数量必须在自己的限制以及剩余地方的数量的限制下
{
//前一种花的数量下实现递增
f[i][j]=(f[i][j]+f[i-1][j-k])%mod;
}
}
}
cout<<f[n][m]<<endl;
}
return 0;
}
本文作者:Vivian-0918
本文链接:https://www.cnblogs.com/Vivian-0918/p/16835462.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步