题目链接 :UVa 111 History Garding
动态规划,最长公共子序列。很久之前做的一道题,今天整理东西把这篇也发上来。动态规划的题目掌握的不好,得加把劲。
/**
LCS
*/
#include<iostream>
#include<cstring>
using namespace std;
int x[30],y[30];
int dp[30][30];
int main()
{
int n,temp;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>temp;
x[temp]=i;
}
while(cin>>temp)
{
y[temp]=1;
for(int i=2;i<=n;i++)
{
cin>>temp;
y[temp]=i;
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(x[i]==y[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
cout<<dp[n][n]<<endl;
}
return 0;
}
本文提供了一道经典的UVa111 History Garding算法题的解决方案,采用动态规划方法求解最长公共子序列(LCS)问题,并通过C++代码实现了具体的算法流程。
381

被折叠的 条评论
为什么被折叠?



