zoukankan      html  css  js  c++  java
  • 动态规划

    终曲

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2720    Accepted Submission(s): 893


    Problem Description
    最后的挑战终于到了!
    站在yifenfei和MM面前的只剩下邪恶的大魔王lemon一人了!战胜他,yifenfei就能顺利救出MM。
    Yifenfei和魔王lemon的挑战很简单:由lemon给出三个字符串,然后要yifenfei说出第一串的某个子串,要求该子串长度最小,并且同时包含第2个串和第3个串。
    特别地,如果有多个这样的子串,则请输出字母序最小的一个。
     
    Input
    输入数据首先是一个整数C,表示测试数据有C组;
    接着是C组数据,每组包含三行字符串,第一个字符串长度大于1小于100
    后面两个串的长度大于1且小于10
     
    Output
    请对应每组输入数据输出满足条件的最短子串;
    如果没有,请输出 No
     
    Sample Input
    2 abcd ab bc abc ab bd
     
    Sample Output
    abc No
     题解:
          枚举所有字符串,把可行的列出来,在进行排列;选出最优;
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<iostream>
    using namespace std;
    int main(){
        string s,s1,s2,s3,str;
        int t;
        scanf("%d",&t);
        getchar();
        while(t--){
            cin>>s1>>s2>>s3;
            str=s1+"#";
            int len=s1.length();
            for(int i=0;i<len;i++){
                for(int j=i+1;j<=len;j++){
                    s=s1.substr(i,j-i);//c++函数,把s1字符串的第i个到第j-i个赋给c;
                    if(s.find(s2)!=-1&&s.find(s3)!=-1){//等于-1表示没有;
                        if(str.length()>s.length()){
                            str=s;
                        }else{
                            if(str>s){
                                str=s;
                            }
                        }
                    }
                }
            }
            if(str.length()==len+1){
                printf("No
    ");
            }else{
                cout<<str<<endl;
            }
        }
        return 0;
    }




    #include<iostream>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    struct node{
        string str;
        int len;
    }k[11000];
    
    bool cmp(node x,node y){
        if(x.len==y.len){
            return x.str<y.str;
        }else{
            return x.len<y.len;
        }
    }
    
    int main(){
        string s1,s2,s3;
        int t;
        cin>>t;
        while(t--){
            cin>>s1>>s2>>s3;
            int cnt=0,flag=0;
            for(int i=0;s1[i];i++){
                for(int j=i;s1[j];j++){
                    string c;
                    for(int q=i;q<=j;q++){
                        c+=s1[q];
                    }
                    if(c.find(s2)!=-1&&c.find(s3)!=-1){
                        k[cnt].str=c;
                        k[cnt].len=c.size();
                        cnt++;
                        flag=1;
                        break;
                    }
                }
            }
            if(flag==0){
                cout<<"No"<<endl;
            }else{
                sort(k,k+cnt,cmp);
                cout<<k[0].str<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    P1991 无线通讯网
    P1155 双栈排序
    P2024 [NOI2001]食物链
    Bellman-Ford&&SPFA算法详解
    P1387 最大正方形
    NOIP2009 靶型数独
    P3812 【模板】线性基
    Misunderstood-Missing-逆向DP
    P3389 【模板】高斯消元法
    牛客练习赛37
  • 原文地址:https://www.cnblogs.com/qqshiacm/p/10821860.html
Copyright © 2011-2022 走看看