luogu P1077 摆花 基础记数dp

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=300000+10;
const int mod=1000007;
//直接dp
//dp[i]表示放了多少花 
int dp[110];
int a[N];
int m,n;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>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]&&j-k>=0;k++)
				dp[j]=(dp[j-k]+dp[j])%mod;
	cout<<dp[m]<<endl;
}
posted @ 2020-03-23 18:02  晴屿  阅读(100)  评论(0编辑  收藏  举报