30:
/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-04-03 19:30:38
* @LastEditTime: 2022-04-03 19:39:32
*/
#include <iostream>
#define LL long long
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;
int a[N];
int n,m;
int dfs(int x,int k)
{
if(k == m) return 1;
if(k > m) return 0;
if(x == n + 1) return 0;
int ans = 0;
for(int i = 0;i <= a[x];i++)
(ans += dfs(x + 1,k + i))%mod;
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1;i <= n; i++)
cin >> a[i];
cout << dfs(1,0);
return 0;
}
100:
/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-04-03 18:16:31
* @LastEditTime: 2022-04-03 19:28:55
*/
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e6 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;
int dp[N];
int a[N];
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
dp[0] = 1;
cin >> n >> m;
for(int i = 1;i <= n;i ++)
cin >> a[i];
for(int i = 1;i <= n;i ++)
for(int j = m;j >= 0;j --)
for(int k = 1;k <= a[i]&&k <= j;k ++)
dp[j] = (dp[j] + dp[j - k])%mod;
cout << dp[m] << endl;
return 0;
}
递归与动态规划:解决两段递归代码实例
914

被折叠的 条评论
为什么被折叠?



