动态规划之Zipper

上一篇那个时间复杂度是2的n次方。提交肯定超时。下面这个才是真正的动态规划的思路:

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
	int N=0;
	cin>>N;
	for(int m=0;m<N;m++)
	{
		string stra,strb,strc;
		cin>>stra>>strb>>strc;
		int i=0,j=0;
		int length1=stra.length();
		int length2=strb.length();
		int maxlen[300][300];
		
		maxlen[0][0]=1;
		
		for(i=0;i<=length1;i++)
		{
			for(j=0;j<=length2;j++)
			{
				if(strc[i+j]==stra[i]&&maxlen[i][j]==1)
				{
					maxlen[i+1][j]=1;
				}
				if(strc[i+j]==strb[j]&&maxlen[i][j]==1)
				{
					maxlen[i][j+1]=1;
				}
			}
		}

		if(maxlen[length1][length2]==1)
		{
			cout<<"Data set "<<m+1<<":yes"<<endl;
		}
		else
		{
			cout<<"Data set "<<m+1<<":no"<<endl;
		}

		for(i=0;i<300;i++)
		{
			for(j=0;j<300;j++)
			{
				maxlen[i][j]=0;
			}
		}
	}
	
	return 0;
}
发布了211 篇原创文章 · 获赞 18 · 访问量 74万+

猜你喜欢

转载自blog.csdn.net/nanfeiyannan/article/details/105343320