• 最大连续上升子序列之动态规划


    动态规划之C语言

    问题:
    输入一组数据,找出其中最大连续上升子序列长度
    输出最大连续上升子序列长度打印该子序列

    12 15 10 18 20 8 16 14 24 18

    思路
    采用动态规划的思想,利用一个以为数组s[i]记录原数组中对应位置的最大连续上升子序列的长度
    比如说:

    12 15 10 18 20 8 16 14 24 18
    1 2 1 2 3 1 2 1 2 1

    分别有的连续上升子序列:12 15 ; 10 18 20 ; 8 16 ;14 24;18
    也就是将原问题转化成了求数组s[i]的最大值
    这样一来就比较直观了
    下面就看一下程序代码实现吧

    代码实现

    #include <stdio.h>
    #include <stdlib.h>
    #define max 10
    
    int main()
    {
        int a[max],s[max];
        int m,k,n;
        printf("输入数组长度:
    ");
        scanf("%d",&n);
        printf("输入数组的值:
    ");
        for(int i=0;i < n;i++){
            scanf("%d ",a[i]);
        }
        //其中a[i]表示输入的数组
        //s[i]表示储存连续上升子序列的下标
        //m 表示当前的最大连续上升子序列的长度
        //k 表示最大连续子序列的终点下标
        //n 表示数组的长度
        s[0] = 1;m = s[0];k = 0;
        for(int i=1;i < n;i++){
            if(a[i] > a[i-1]){
                s[i] = s[i] + s[i-1] + 1;
            }else{
                s[i] = 1;
            }
            if(s[i] > m){
                m = s[i];
                k=i;
            }
        }
        printf("最长连续上升子序列长度:%d
    ",m);
        printf("最大连续上升子序列为:
    ");
        for(int i=k-m+1;i < k;i++){
            printf("%d ",a[i]);
        }
        return 0;
    }
    
    
  • 相关阅读:
    mysql查询重复
    JS全局屏蔽回车事件
    java判断某个字符串包含某个字符串的个数
    给Eclipse提速的7个技巧(转)
    Mysql中将查询出来的多列的值用逗号拼接
    模仿淘宝手机号码输入框
    浏览器的默认样式
    GUBE---一丝
    学习CSS布局
    CSS 居中大全
  • 原文地址:https://www.cnblogs.com/Indomite/p/14195229.html
Copyright © 2020-2023  润新知