二维vector的初始化:长度 初始元素
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
set<string> ss;
string str1,str2;
//将dp[][]填完
//然后逆回去,并求出所有可能解
/*
每种解不能重复,所以用set<string>
*/
int lcs_length(string str1,string str2,vector<vector<int > > &vec){
for(int i=1;i<=str1.length();i++){
for(int j=1;j<=str2.length();j++){
if(str1[i-1]==str2[j-1])
vec[i][j]=vec[i-1][j-1]+1;
else
vec[i][j]=max(vec[i-1][j],vec[i][j-1]);
}
}
return vec[str1.length()][str2.length()];
}
void lcs_print(int i,int j,string tmp,vector<vector<int > > vec){
while(i>0&&j>0){
if(str1[i-1]==str2[j-1]){
tmp=str1[i-1]+tmp;
i--;
j--;
}
else{
if(vec[i-1][j]>vec[i][j-1])
i--;
else if(vec[i-1][j]<vec[i][j-1])
j--;
else{
lcs_print(i-1,j,tmp,vec);
lcs_print(i,j-1,tmp,vec);
return;
}
}
}
ss.insert(tmp);
}
int main(){
string tmp;
cin>>str1>>str2;
vector< vector<int > > vec(str1.length()+1,vector<int>(str2.length(),0));
int length=lcs_length(str1,str2,vec);
lcs_print(str1.length(),str2.length(),tmp,vec);
set<string>::iterator it=ss.begin();
while(it!=ss.end())
cout<<*it++<<endl;
}