不是很明白在自己的电脑上开1000*1000的数组,直接就炸了,但是却能AC。emmmm,于是改写了递归,很荣幸的超时了。
递归程序:
int Lcs(string a , string b , int aindex , int bindex,int num)
{
int res = num;
if(aindex==0||bindex==0)
{
return res ;
}
if(a[aindex-1]==b[bindex-1])
{
res+=1;
res = Lcs(a,b,aindex-1,bindex-1,res);
}
else {
res = max(Lcs(a,b,aindex,bindex-1,res),Lcs(a,b,aindex-1,bindex,res));
}
return res ;
}
下面是全部代码:
#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
//定义函数段
#define repf(i,a,b) for(int i =(a);i<=(b);i++)
using namespace std;
typedef long long ll ;
const int MAX = 100001;
int Lcs(string a , string b , int aindex , int bindex,int num)
{
int res = num;
if(aindex==0||bindex==0)
{
return res ;
}
if(a[aindex-1]==b[bindex-1])
{
res+=1;
res = Lcs(a,b,aindex-1,bindex-1,res);
}
else {
res = max(Lcs(a,b,aindex,bindex-1,res),Lcs(a,b,aindex-1,bindex,res));
}
return res ;
}
int main() {
string a ,b;
int maxNum = 0;
int m[1000][1000];
while(cin>>a&&cin>>b)
{
maxNum = 0 ;
memset(m,0,sizeof(m));
repf(i,1,strlen(a.c_str()))
{
repf(j,1,strlen(b.c_str()))
{
if(a[i-1]==b[j-1])
{
m[i][j] = m[i-1][j-1]+1;
if(m[i][j]>maxNum)
{
maxNum=m[i][j];
}
}
else {
m[i][j] = max(m[i-1][j],m[i][j-1]);
}
}
}
cout <<maxNum <<endl;
}
return 0;
}
emmm,有知道的,可以告诉我一下为啥。
局部变量存储在栈中,是动态分配与回收的。与编译器有关。
全局变量包括静态变量存储在全局区。程序生成时,分配。当程序结束时回收。
还有一个堆,这个就是new malloc free delete 都是在处理堆中的数据