心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
题目大意:最长公共子序列。
DP。
注意:每组数据之后输出一个空行。
以下是我的代码:
#include<algorithm>
#include
<cstdio>
using namespace std;
const int kMaxn(107);

int d[kMaxn][kMaxn];

int main()
{
    #ifndef ONLINE_JUDGE
    freopen(
"data.in","r",stdin);
    freopen(
"data.out","w",stdout);
    
#endif

    
int T(0),n,m;
    
while(scanf("%d%d",&n,&m)==2 && (n || m))
    {
        
int a[kMaxn],b[kMaxn];
        
for(int i=1;i<=n;i++)
            scanf(
"%d",&a[i]);
        
for(int i=1;i<=m;i++)
            scanf(
"%d",&b[i]);

        d[
0][0]=d[0][1]=d[1][0]=0;
        
for(int i=1;i<=n;i++)
            
for(int j=1;j<=m;j++)
                
if(a[i]==b[j])
                    d[i][j]
=d[i-1][j-1]+1;
                
else
                    d[i][j]
=max(d[i-1][j],d[i][j-1]);

        T
++;
        printf(
"Twin Towers #%d\n",T);
        printf(
"Number of Tiles : %d\n\n",d[n][m]);
    }

    
return 0;
}
posted on 2011-05-24 16:14 lee1r 阅读(329) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:动态规划

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理