zoukankan      html  css  js  c++  java
  • 暑假集训单切赛第一场 CF 191A Dynasty Puzzles

    题意不说了,看原题吧,思路见代码:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    int n;
    char str[15];
    int len;
    char a,b;  //a为名字的开头字符,b为名字的结尾字符
    long long dp[26][26];   //dp[i][j]记录以字母i开头和字母j结尾的朝代名长度 ,最后只要遍历一遍dp[i][i],取最大长度的即可
    int main()
    {
        int tmp;
        memset(dp,0,sizeof(dp));
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%s",str);
            len=strlen(str);
            a=str[0];
            b=str[len-1];
            int flag=0;
            //如果以a结尾且不等于0的朝代名长度加上他的名字,比现有的朝代名更长,则更新。
            for(int j=0;j<=25;j++){
                tmp=a-'a';
                if(dp[j][tmp]!=0 && dp[j][tmp]+len>dp[j][b-'a']){
                    flag=1;
                    dp[j][b-'a']=dp[j][tmp]+len;
                }
            }
            //如果他名字足够长,也可以直接当一个朝代的首位皇帝
            if(dp[a-'a'][b-'a']<len)
                dp[a-'a'][b-'a']=len;
        }
        long long ans=0;
        //遍历对角线上的,取最大值
        for(int j=0;j<=25;j++){
            if(dp[j][j]>ans)
                ans=dp[j][j];
        }
        printf("%I64d
    ",ans);
        return 0;
    }
  • 相关阅读:
    vue与react的区别
    for(key in obj)
    github上传项目
    第一个blog
    黑客几乎绝不用鼠标?
    中国白帽黑客调查
    编程新手六部曲
    程序猿看了要xiao了
    程序是如何执行的?
    IT 技术人需要思考的 15 个问题
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/3285544.html
Copyright © 2011-2022 走看看