为什么第一段代码ac第二段代码60啊,实在看不出来次序会影响什么了
查看原帖
为什么第一段代码ac第二段代码60啊,实在看不出来次序会影响什么了
1048629
Missnovdoes楼主2024/1/28 16:53

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;
}
2024/1/28 16:53
加载中...