| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2275 人关注过本帖
标题:最长公共子序列 WA……
只看楼主 加入收藏
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
结帖率:81.48%
收藏
已结贴  问题点数:20 回复次数:6 
最长公共子序列 WA……
http://acm.

#include <iostream>
#include <string>
int maxa[1000];
using namespace std;
void solve()
{
    string a,b;
    cin>>a>>b;
    int lena=a.size(),lenb=b.size(),cnt=0,ans=0,i,j,tmp;
    for (i=0;i<lena;i++)
    {
        tmp =0;
        for (j=0;j<lenb;j++)
        {
            if (a[i] == b[j])
            {
                if (tmp <maxa[j])
                    tmp = maxa[j];
            }
        }
        maxa[i]=tmp+1;
        cout<<maxa[i]<<endl;
    }
    int max=0;
    for(i=0;i<lena;i++)
        if (max<maxa[i])
            max=maxa[i];
        cout<<max<<endl;
}
int main()
{
    int n;
    cin>>n;
    while (n--)
        solve();
    return 0;
}

[ 本帖最后由 love24114 于 2012-2-5 19:21 编辑 ]
搜索更多相关主题的帖子: void include 
2012-02-05 19:05
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:18 
1.我真没看懂你的代码在干什么。
2.你的输出格式就不满足题目要求,它只要输出最长公共子序列的长度。cout<<maxa[i]<<endl;是多余的输出,或许只是你测试时加进入的。

最长公共子序列是一个经典问题,应用动态规划法解。
这段代码是最基础的解法,为方便没做空间上的优化。AC
程序代码:
#include<stdio.h>
#include<string.h>

int c[1001][1001];

int LCS(char * sa, char * sb)
{
    int i, j, la, lb;
    la = strlen(sa);
    lb = strlen(sb);
    for(i = 1; i <= la; i++)
    for(j = 1; j <= lb; j++)
    c[i][j] = (sa[i - 1] == sb[j - 1]) ? c[i - 1][j - 1] + 1 : (c[i - 1][j] >= c[i][j - 1]) ? c[i - 1][j] : c[i][j - 1];//个人喜好,如果还没有熟练掌握这类语法基础请勿模仿
    return c[la][lb];
}

int main()
{
    int n;
    char sa[1001], sb[1001];
    for(scanf("%d", &n); n--;)
    {
        scanf("%s%s", sa, sb);
        printf("%d\n", LCS(sa, sb));
    }
    return 0;
}

重剑无锋,大巧不工
2012-02-05 23:43
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:2 
动态规划啊……
scanf("%s%s", sa, sb);为什么看到这个我忍不住要笑。

梅尚程荀
马谭杨奚







                                                       
2012-02-06 00:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,不要笑,严肃点。那是两个很有意义的变量名。

重剑无锋,大巧不工
2012-02-06 00:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
下午和朋友去K歌了,十一点多才回来。明天上午八点半还要开个会,就不和你们闲聊了

重剑无锋,大巧不工
2012-02-06 00:18
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 2楼 beyondyf
其实这题只要用1000的一维数组就可以了  因为每一个dp[i][j]只由dp[i-1][j-1] dp[i-1][j] dp[i][j-1]转移过来

所以没必要保存所有的结果  详见北航的http://www.   题目只给80K内存

                                         
===========深入<----------------->浅出============
2012-02-06 11:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
老杨说的没错。昨天太晚了,随手写的。而且南阳理工的内存限制很宽松。

重剑无锋,大巧不工
2012-02-06 13:29
快速回复:最长公共子序列 WA……
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022855 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved