zoukankan      html  css  js  c++  java
  • P1481 魔族密码

    题目描述

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

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

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

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

    i int integer

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

    integer

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

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

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

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

    说明

    DP LIS

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define mp make_pair
    #define pb push_back
    const int maxn = 100005;
    // name*******************************
    int f[2005];
    int n;
    string s[2005];
    int ans=0;
    // function******************************
    
    
    //***************************************
    int main()
    {
        cin>>n;
        For(i,1,n)
        {
            cin>>s[i];
        }
        For(i,1,n)
        {
            f[i]=1;
            For(j,1,i-1)
            {
                if(s[i].find(s[j])==0)
                {
                    f[i]=max(f[i],f[j]+1);
                }
            }
            ans=max(ans,f[i]);
        }
        cout<<ans;
    
    
    
        return 0;
    }

    强调下这里不能用LIS的nlogn二分贪心的做法,因为会覆盖元素,导致无法及时更新

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define mp make_pair
    #define pb push_back
    const int maxn = 100005;
    // name*******************************
    string f[2005];
    int n;
    string s[2005];
    int top=0;
    // function******************************
    
    //***************************************
    int main()
    {
        cin>>n;
        For(i,1,n)
        {
            cin>>s[i];
        }
        For(i,1,n)
        {
            if(s[i].find(f[top])==0)
                f[++top]=s[i];
            else
            {
                int l=1,r=top;
                while(l<r){
                    int mid=l+((r-l)>>1);
                    if(s[i].find(f[mid])==0)
                        l=mid+1;
                    else
                        r=mid;
                }
                f[l]=s[i];
            }
    //        For(k,1,top)cout<<i<<":"<<f[k]<<" ";
    //        cout<<endl;
        }
        cout<<top;
    
        return 0;
    }
    错误样例
  • 相关阅读:
    BeautifulSoup
    python爬虫操作excel
    requests
    urllib
    线程的基本用法
    WebView
    播放多媒体文件
    调用摄像头和相册
    03 pycharm编辑默认模板
    测试
  • 原文地址:https://www.cnblogs.com/planche/p/8650423.html
Copyright © 2011-2022 走看看