• 洛谷 P1481 魔族密码


    题目描述

    风之子刚走进他的考场,就……

    花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)

    风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###

    花花:……咦好冷我们现在要解决的是魔族的密码问题(自我陶醉:搞不好魔族里面还会有人用密码给我和菜虫写情书咧,哦活活,当然是给我的比较多拉*^_^*)。魔族现在使用一种新型的密码系统。每一个密码都是一个给定的仅包含小写字母的英文单词表,每个单词至少包含1个字母,至多75个字母。如果在一个由一个词或多个词组成的表中,除了最后一个以外,每个单词都被其后的一个单词所包含,即前一个单词是后一个单词的前缀,则称词表为一个词链。例如下面单词组成了一个词链:

    i int integer

    但下面的单词不组成词链:

    integer

    intern 现在你要做的就是在一个给定的单词表中取出一些词,组成最长的词链,就是包含单词数最多的词链。将它的单词数统计出来,就得到密码了。

    风之子:密码就是最长词链所包括的单词数阿……

    花花:活活活,还有,看你长得还不错,给你一个样例吧:

    输入输出格式

    输入格式:

     

    这些文件的格式是,第一行为单词表中的单词数N(1<=N<=2000),下面每一行有一个单词,按字典顺序排列,中间也没有重复的单词咧!!

     

    输出格式:

     

    你要提交的文件中只要在第一行输出密码就行啦^^

     

    输入输出样例

    输入样例#1:
    5
    i
    int
    integer
    intern
    internet
    
    输出样例#1:
    4
    

    说明

    DP LIS

    思路:DP

    #include<cstdio>
    #include<cstring>
    #define MAXN 2001
    char s[MAXN][76];
    int f[MAXN],ans;
    int main(){
        int n;
        scanf("%d
    ",&n);
        for(int i=1;i<=n;i++)
            scanf("%s",s[i]);
        f[1]=1;
        for(int i=2;i<=n;i++){
            int maxn=0;
            for(int j=i-1;j>=1;j--)
                if(maxn<f[j]&&!strncmp(s[i],s[j],strlen(s[j])))
                    maxn=f[j];
            f[i]=maxn+1;
        }
        for(int i=1;i<=n;i++)
            if(ans<f[i])
                ans=f[i];
        printf("%d",ans);
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    ES6笔记分享 part 2
    ES6笔记分享 part 1
    JS事件之自建函数bind()与兼容性问题解决
    JavaScript DOM事件对象的两个小练习 | 学习内容分享
    JavaScript数组的方法 | 学习笔记分享
    JavaScript构造函数 | 学习笔记分享
    Hexo+Github个人博客搭建 | 实战经验分享
    Hello world!
    “1+X”证书Web前端开发等级考试简介
    1+x证书Web 前端开发初级——理论考试(试卷1)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7426565.html
Copyright © 2020-2023  润新知