zoukankan      html  css  js  c++  java
  • 动态规划学习--经典例题(一)

    最长不降子列:

      

    解题思路:

                  常规思路

     

          穷举—>从第一个数开始,慢慢往后面去寻找比他大的数,但是会发现,其实这样根本找不到最优的那个解,有时候看似最优,其实不是最优选择,即有后效性

     

                  正确思路

     

          确定一个最大的数,从这个数往前找。这样每个数都有一个对应的最长上升子列,到了最后的数,就有了要求的最长上升子列

     

                  Maxlen[]储存最长上升子列的长度:

    A[]

    1

    7

    3

    5

    9

    4

    10

    Maxlen[]

    1

    2

    2

    3

    4

    3

    5

     

     

     

     

        

     1 /*
     2     递推型动态规划
     3         求最长上升子列
     4         从局部到整体,先确定最大的那个值,之后一步步往回求
     5 
     6 */
     7 
     8 #include<iostream>
     9 #include<algorithm>
    10 #include<cstring>
    11 using namespace std;
    12 
    13 #define Max 101
    14 
    15 int main() {
    16     int a[Max],maxlen[Max];
    17     int n;
    18     int i,j;
    19     cout<<"请输入数组的长度"<<endl;
    20     cin>>n;
    21     cout<<"请输入数组的数据"<<endl;
    22     for(i=1; i<=n; i++) {
    23         cin>>a[i];
    24         maxlen[i]=1;
    25     }
    26     for(i=2; i<=n; i++)
    27         for(j=1; j<i; j++)
    28             if(a[j]<a[i]) {
    29                 maxlen[i]=max(maxlen[j]+1,maxlen[i]);//可能存在 maxlen[i]比 maxlen[j]+1大,所以要进行比较 
    30             }
    31     cout<<* max_element(maxlen+1,maxlen+ n + 1);//找出最大值
    32     return 0;
    33 }
    View Code

     

  • 相关阅读:
    cocos2dx环境搭建(android平台)
    转:Android开发实践:Java层与Jni层的数组传递
    转:Linux串口编程入门详解
    Linux串口通信之termios结构体说明
    SQLite3 C语言API入门
    android常用工具记录
    Java中byte与16进制字符串的互相转换
    JNI原理及实现
    Java调用动态库方法说明
    JAVA中使用动态链接库须知
  • 原文地址:https://www.cnblogs.com/printwangzhe/p/12318804.html
Copyright © 2011-2022 走看看