60分求助
查看原帖
60分求助
1211899
Bobi2014楼主2024/8/15 17:32
#include<bits/stdc++.h>
using namespace std;
int dp[10001][101],a[101],n,m;
int dfs(int k,int i){
	if(dp[k][i] != 0){
		return dp[k][i];
	}
	if(dp[k][i] == -1){
		return 0;
	}
	if(i > m){
		return 0;
	} 
	if(k > n){
		if(i == m){
			return 1;
		}
		return 0;
	}
	int ret = dfs(k + 1,i) % (int)(1e6 + 7);
	for(int j = 1;j <= a[k];j ++){
		ret = (ret + dfs(k + 1,i + j)) % (int)(1e6 + 7); 
	}
	if(ret == 0){
		dp[k][i] = -1;
	}
	return dp[k][i] = ret;
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++){
		cin >> a[i];
	}
	cout << dfs(1,0);
	return 0;
}

2024/8/15 17:32
加载中...