dp解法的题解

071maozihan 2022-04-03 15:27:13 2022-04-03 15:27:51 17 返回题目

#include<bits/stdc++.h>

#define int long long

using namespace std;

const long long maxn=1e2+10,P=1000007;

int c,n;

int a[maxn];

int dp[maxn][maxn];

signed main(){

cin>>n>>c;

for(int i=1;i<=n;i++){

	cin>>a[i];//输入不多说 

}

for(int i=0;i<=n;i++)dp[0][i]=1;//初始化,表示不放花时的方案数 

for(int i=1;i<=c;i++){//枚举放了i盆花的情况 

	for(int j=1;j<=n;j++){//枚举第j种花 

		for(int k=0;k<=i;k++){//枚举区间k~i全放第j种花 

			if(i-k<=a[j]){//判断是否属于每种花的数量限制 

				dp[i][j]+=dp[k][j-1];

				dp[i][j]%=P;//不忘取模 

			}

		}

	}

}

cout<<dp[c][n];//输出 

return 0;

}

{{ vote && vote.total.up }}