ac代码
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int mod = 1e6 + 7;
int vis[N][N];
int a[N];
int n, m;
int num = 0;
int dfs(int x, int y)
{
if (y > m)
{
return 0;
}
if (vis[x][y] != 0)
{
return vis[x][y];
}
if (y == m)
{
return 1;
}
if (x == n)//越界了
{
return 0;
}
int ans = 0;
for (int i = 0; i <= a[x]; i++)
{
ans = (ans + dfs(x + 1, y + i) % mod) % mod;
}
vis[x][y] = ans;
return ans;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int num = dfs(0, 0);
printf("%d\n", num);
return 0;
}
错误代码
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int mod = 1e6 + 7;
int vis[N][N];
int a[N];
int n, m;
int num = 0;
int dfs(int x, int y)
{
if (vis[x][y] != 0)
{
return vis[x][y];
}
if (y == m)
{
return 1;
}
if (y > m)
{
return 0;
}
if (x == n)//越界了
{
return 0;
}
int ans = 0;
for (int i = 0; i <= a[x]; i++)
{
ans = (ans + dfs(x + 1, y + i) % mod) % mod;
}
vis[x][y] = ans;
return ans;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int num = dfs(0, 0);
printf("%d\n", num);
return 0;
}