| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:喜欢动态规划的进来!!In Reply To:Re:喜欢动态规划的进来!! Posted by:tempfor at 2007-04-08 09:18:15 这题:
a b a
#
a a b
#
是输出a a,还是a b,那位大牛看看!!
为什么我的程序一直wrong
#include<iostream>
#include<string>
#include<map>
using namespace std;
string s1[101],s2[101];
int f[101][101];
int la,lb,lc;
inline int max(int a,int b)
{
return a>b?a:b;
}
void find(int k,int i,int j)
{
if(k==0)
{
return;
}
if(f[i][j]==f[i-1][j-1]+1)
{
find(k-1,i-1,j-1);
if(k!=lc)
{
cout<<s1[i]<<' ';
}
else
{
cout<<s1[i]<<endl;
}
}
else if(f[i][j]==f[i][j-1])
{
find(k,i,j-1);
}
else
{
find(k,i-1,j);
}
}
void DP()
{
int i,j;
memset(f,0,sizeof(f));
for(i=1;i<=la;i++)
{
for(j=1;j<=lb;j++)
{
if(s1[i]==s2[j])
{
f[i][j]=f[i-1][j-1]+1;
}
else
{
f[i][j]=max(f[i-1][j],f[i][j-1]);
}
}
}
lc=f[la][lb];
if(lc==0)
{
cout<<endl;
return;
}
find(lc,la,lb);
}
int main()
{
string temp;
int i=1,j;
while(cin>>s1[i++])
{
if(s1[i-1]=="#")
{
la=i-2;
i=1;
j=1;
while(cin>>s2[j++])
{
if(s2[j-1]=="#")
{
lb=j-2;
DP();
break;
}
}
}
}
return 1;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator