求助,记忆化搜索,60pts -> AC
查看原帖
求助,记忆化搜索,60pts -> AC
670324
nafonsn楼主2023/7/9 11:50

60pts代码

#include<bits/stdc++.h>
using namespace std;
int m,n;
int mod=1e6+7;
int a[105];
int f[105][105];
int dfs(int x,int sum)
{
	if(f[x][sum]) return f[x][sum];
	if(sum>m) return 0;
	if(sum==m) return 1;
	if(x==n+1) return 0;
	int ans=0;
	for(int i=0;i<=a[x];i++)
	{
		ans+=dfs(x+1,sum+i);
		ans=ans%mod;
	}	
	f[x][sum]=ans;
    return ans;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	cout<<dfs(1,0);
}

为什么把dfs里面的第一个判断条件if(f[x][sum]) return f[x][sum];移成最后的判断条件就行了?越界的情况应该不会被记录吧……

2023/7/9 11:50
加载中...