zoukankan      html  css  js  c++  java
  • 南阳17(单调递增最长子序列)

    单调递增最长子序列

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    求一个字符串的最长递增子序列的长度
    如:dabdbf最长递增子序列就是abdf,长度为4
     
    输入
    第一行一个整数0<n<20,表示有n个字符串要处理
    随后的n行,每行有一个字符串,该字符串的长度不会超过10000
    输出
    输出字符串的最长递增子序列的长度
    样例输入
    3
    aaa
    ababc
    abklmncdefg
    样例输出
    1
    3
    7
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     while(n--)
     8     {
     9         char str[10000];
    10         int i,j,max,len,dp[10000];
    11         scanf("%s",str);
    12         len=strlen(str);
    13         for(i=0;i<len;i++) //memset函数只可对(int)型数组赋初值 0 和-1; 
    14         dp[i]=1;
    15         for(i=1;i<len;i++)//核心部分; //不是很理解,但经过手算正确;
    16         {
    17             for(j=0;j<i;j++)
    18             {
    19                 if(str[i]>str[j]&&dp[i]<dp[j]+1)
    20                 dp[i]=dp[j]+1;
    21             } 
    22         }
    23         max=dp[0];
    24         for(i=1;i<len;i++)
    25         {
    26             if(dp[i]>max)
    27             max=dp[i]; 
    28          } 
    29          printf("%d
    ",max);
    30     } 
    31     return 0;
    32 }

    //另外需要注意的是,memset函数是逐字节进行填充,所以a一般为char *型。对于其它类型的a,可以填充的值有两个,0和-1。因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1

  • 相关阅读:
    ubuntu14.04 允许root用ssh登录
    MySQL(Navicat)运行.sql文件时报错:[Err] 2006
    Ubuntu14.04 安装git
    Ubuntu14.04下安装redis
    ubuntu apt-get update 失败解决
    检出商品详情中的图片并替换url
    nohup和&后台运行,进程查看及终止
    ubuntu 的chmod 和 chown
    php5.4安装fileinfo扩展
    crontab
  • 原文地址:https://www.cnblogs.com/soTired/p/4549084.html
Copyright © 2011-2022 走看看