新手递归了下,较为生疏
查看原帖
新手递归了下,较为生疏
368414
lyfdayu楼主2022/6/25 08:49
#include <iostream>
using namespace std;
int a[1001],dp[3][1001][1001];
bool yz[3][1001][1001];
int dot(int k, int i, int j)
{
	if (yz[k][i][j]) return dp[k][i][j];
	if (i==j) {dp[1][i][j]=1,dp[2][i][j]=0; yz[1][i][j]=1,yz[2][i][j]=1; return 1;}
	int ans=0;
	if (k==1)
	{
		if (a[i]<a[i+1]) ans+=dot(1,i+1,j)%19650827;
		if (a[i]<a[j]) ans+=dot(2,i+1,j)%19650827;
		dp[1][i][j]=ans;
		yz[1][i][j]=1;
	}
	if (k==2)
	{
		if (a[j]>a[i]) ans +=dot(1,i,j-1)%19650827;
		if (a[j]>a[j-1]) ans+=dot(2,i,j-1)%19650827;
		dp[2][i][j]=ans;
		yz[2][i][j]=1;
	}
	return ans;
}
int main()
{
	int n,ans=0;
	cin>>n;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	ans=dot(1,1,n)+dot(2,1,n);
	cout <<ans%19650827;
}

大神们帮忙看看记忆递归怎么把空间yz给优化掉,有些dp[][][]就是0

2022/6/25 08:49
加载中...