五十分求助
查看原帖
五十分求助
1246000
osu_rice222楼主2024/9/7 10:50
#include<bits/stdc++.h>
using namespace std;
int a[105];//a[i]表示第i种花最多能放多少盆
int n,m,sum;
int cnt[300][300];//cnt[i][j]表示所有的x-v结果对应的答案
int vis[300][300];
int dfs(int x,int v){//查找到第x种花,当前已经摆了v盆	
	if(x==n){
		if(v>=0 && v<=a[x]){
			return 1;
		}else{
			return 0;
		}
	}
	
	if(vis[x][v]){     //记忆化
		return cnt[x][v];
	}
	
	int cnt1 = 0;
	for(int i=0;i<=a[x];i++){
		cnt1 += dfs(x+1,v-i);
		cnt1 %= 1000007;
	}
	cnt[x][v] = cnt1;
	vis[x][v] = 1;
	return cnt[x][v];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	int t = dfs(1,m);
	cout<<t%1000007;
	return 0;
}
2024/9/7 10:50
加载中...