• 数组字符串uva 10405 Longest Common Subsequence(最长公共子序列)


    在本文中,我们主要介绍数组字符串的内容,自我感觉有个不错的建议和大家分享下

        标题:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346

        经典的LCS水题。。。

        用来入门是极好的。也是我的第一道dp题。

        但是一个非常坑的点是它的数据似乎有单数组的,这意味着如果用while(gets(a))这样去做循环的话可能会犯错,必须用两个串一起读入才行,这点上我被坑了几回。。。但貌似有人也用读单串去写却没有犯错(见此),不知道是我判断错误还是其他问题。。。

        每日一道理
    古人云:“海纳百川,有容乃大。”人世间,不可能没有矛盾和争吵,我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过:“宽恕和受宽恕的难以言喻的快乐,是连神明都会为之羡慕的极大乐事。”让我们从宽容中享受快乐,从谅解中体会幸福吧!

        还有一点,第一次做dp题,搞懂算法后却不知道如何读入字符串才能让数组第一位是0,最后是参考了别人代码后用gets(a+1)这类形式读入字符串,以及strlen(a+1)获取字符串长度,豁然开朗啊。

        后来我又发现了其实可以正常去读入,在dp的时候对贮存数组处置时下标都多+1就行了。。。

        

    #include<cstdio>
    #include<cstring>
    #define MAXN 1010
    
    char a[MAXN], b[MAXN];
    int c[MAXN][MAXN];
    
    int max(int a, int b)
    {
    	if (a > b)
    		return a;
    	return b;
    }
    
    int main()
    {
    	while (gets(a + 1) && gets(b + 1))
    	{
    		int al = strlen (a + 1), bl = strlen (b + 1);
    		memset(c, 0, sizeof(c));
    		for (int i = 1; i <= al; i++)
    			for (int j = 1; j <= bl; j++)
    				if (a[i] == b[j])
    					c[i][j] = c[i - 1][j - 1] + 1;
    				else
    					c[i][j] = max(c[i - 1][j], c[i][j - 1]);
    		printf("%d\n", c[al][bl]);
    	}
    	return 0;
    }

    文章结束给大家分享下程序员的一些笑话语录: 系统程序员
      1、头皮经常发麻,在看见一个蓝色屏幕的时候比较明显,在屏幕上什幺都看不见的时候尤其明显;
      2、乘电梯的时候总担心死机,并且在墙上找reset键;
      3、指甲特别长,因为按F7到F12比较省力;
      4、只要手里有东西,就不停地按,以为是Alt-F、S;
      5、机箱从来不上盖子,以便判断硬盘是否在转;
      6、经常莫名其妙地跟踪别人,手里不停按F10;
      7、所有的接口都插上了硬盘,因此觉得26个字母不够;
      8、一有空就念叨“下辈子不做程序员了”;
      9、总是觉得9号以后是a号;
      10、不怕病毒,但是很害怕自己的程序;

  • 相关阅读:
    JAVA使用POI如何导出百万级别数据
    Excel最多可存多少行,多少列?
    jvm参数调优
    迭代器相应型别
    指向NULL的类
    const T & 的适用范围
    函数前修饰const与函数名后修饰const
    继承中赋值函数的注意点
    string类的简要实现
    malloc/free与new/delete的不同及注意点
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3076766.html
Copyright © 2020-2023  润新知