• DP最长递增字符串


    对于最简单DP问题,比如7 9 1 10 3中最长的递增字符串就是7 9 10,所以长度是3.

    对于这个问题,就是从第二个开始,让后面的每一个字符都假设作为咱们要找的最长的字符串的最后一个字符,然后从第一个字符开始和找,这样逐渐找就能找到最长的^…^

    状态转移方程为

    状态转移方程 DP[ i ] = max { 1 ,max(DP[ 0 ] ...DP[ k ]... DP[ i-1 ]) +1 |A[ k ] < A[ i ] }

    具体解释见代码

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8     int ss[1005];//存储字符
     9     int sslen[1005];//存储每一个到当前字符所形成的最长递增字符串的长度
    10     int n,maxx,maxlen;
    11     while(cin>>n){
    12             maxlen=1;//记录最长的字符串的长度
    13         memset (ss,0,sizeof(ss));
    14     for(int i=1;i<=n;i++)
    15         cin>>ss[i];
    16     for(int k=1;k<=n;k++)
    17         sslen[k]=1;//初始化数组
    18     for(int i=2;i<=n;i++){
    19         maxx=0;//记录到当前字符的最长的递增个数
    20         for(int j=1;j<=i-1;j++){
    21             if(ss[j]<ss[i]&&sslen[j]>maxx){
    22                 maxx=sslen[j];
    23             }
    24         }
    25         sslen[i]=maxx+1;
    26     if(sslen[i]>maxlen)
    27         maxlen=sslen[i];
    28     }
    29     cout<<maxlen<<endl;
    30     }
    31 }
    View Code
    你若盛开,清风自来...
  • 相关阅读:
    POJ 3687 Labeling Balls <<拓扑排序
    FATFS 初学之 f_mount
    STM8 低功耗时钟管理
    还记得 C中带参宏的 "#"号吗?
    8.9并发编程(一)
    8.8网络编程(三)
    8.7网络编程(二)
    8.6网络编程(一)
    7.30反射、元类及项目生命周期
    7.29多态
  • 原文地址:https://www.cnblogs.com/shangjindexiaoqingnian/p/5743459.html
Copyright © 2020-2023  润新知