动态规划(生兔子问题 最长公共子序列)

动态规划(生兔子问题 最长公共子序列),第1张

动态规划(最长公共子序列)

int LCSLength(const char* X,const char* Y,int m,int n)
{
	if(m==0||n==0)return 0;
	else
	{
		if(X[m]==Y[n])return LCSLength(X,Y,m-1,n-1)+1;
		else
		{
			int max1=LCSLength(X,Y,m-1,n);
			int max2=LCSLength(X,Y,m,n-1);
			return max1>max2?max1:max2;
		}
	}
}



void LCSLength(string& X,string& Y,vector<vector<int>>& c,vector<vector<int>& s)
{
	int n=X.size()-1;
	int m=Y.size()-1;
	for(int i=0;i<=n;++i) c[i][0]=0;
	for(int j=0;j<=m;++j) c[0][j]=0;
	for(int i=0;i<=n;++i)
	{
		for(int j=0;j<=m;++j)
		{
			if(X[i]==Y[j])
			{
				c[i][j]=c[i-1][j-1]+1;
				s[i][j]=1;
			}
			else if(c[i-1][j]>c[i][j-1])
			{
				c[i][j]=c[i-1][j];
				s[i][j]=2;
			}
			else
			{
				c[i][j]=c[i][j-1];
				s[i][j]=3
			}
		}
	}
}

动态规划(生兔子问题)

有一对兔子,从出生后3个月起每月都生一对兔子,兔子涨到第三个月后每月有声一对兔子,假如兔子不死,问第24个月的兔子总数为多少。

int fun(int n)
{
	if (n <= 2)return 1;
	int* ar = new int[n + 1];
	ar[1] = 1;
	ar[2] = 1;
	for (int i = 3;i <= n;++i)
	{
		ar[i] = ar[i - 1] + ar[i - 2];
	}
	int total = ar[n];
	delete[]ar;
	return total;
}


//递归
int fac(int n,int a,int b)
{
	if(n==1||n==2)return a;
	return fac(n-1,a+b,a);
}
int fac(int n)
{
	int a=1,b=1;
	return fac(n,a,b);
}

dp[i][j]
i==1   i>1
j==1   j>1
dp[i][j]=dp[i-1][j]+dp[i][j-1]

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存