• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            jake1036

            動(dòng)態(tài)規(guī)劃法-----最長(zhǎng)增序子序列(非連續(xù))

                       動(dòng)態(tài)規(guī)劃法 求最長(zhǎng)非連續(xù)增序子序列

                問(wèn)題描述

              一個(gè)整形數(shù)組a[]= {1 ,7, 3, 5, 9, 4, 8},其中a0 ,a1為一個(gè)遞增子序列長(zhǎng)度為2, a0 a2 a5 a6為一個(gè)遞增序列,其長(zhǎng)度為4,且為最長(zhǎng)的遞增子序列。

               解決方案

               設(shè)b[j]為以a[j]結(jié)束的最長(zhǎng)遞增序列的長(zhǎng)度,則b[j] = max(b[k]) ,其中1<=k<j ,且a[k] < a[j] 。 問(wèn)題的答案為max(b[j]) 1<= j <= n 。

               解決方法類(lèi)似求最大連續(xù)子序列和的問(wèn)題。
              


              代碼如下

              
            /*
              定義s[i] 表示第i個(gè)位置處,以a[i]為結(jié)尾的最大遞增長(zhǎng)度 
              先求每個(gè)位置處的最大長(zhǎng)度,然后遍歷求最大長(zhǎng)度即可 
              下面一步增加一個(gè)存儲(chǔ)結(jié)構(gòu),存儲(chǔ)究竟是哪幾個(gè)數(shù)組構(gòu)成了遞增的最大長(zhǎng)度的數(shù)組 
            */


            #include 
            <iostream>
             
            using namespace std ;
             
            const int N = 1010 ;
             
             
            int s[N] ;
             
            int a[N]  ; 
             
            int p[N]  ; //p[i] 表示 以a[i]結(jié)尾的最長(zhǎng)子串的前一個(gè)節(jié)點(diǎn)的標(biāo)號(hào) 
             int main()
             
            {
               
            int n , i , k;
               scanf(
            "%d" , &n) ;
               
            for(i = 0 ; i < n ;i++)
               
            {
                 scanf(
            "%d" ,&a[i]);
                 s[i] 
            = 1 ;
                 p[i] 
            = i ; //初始化每一個(gè)路徑   
               }

               
               
            for(i = 0 ; i < n ; i++)  
                
            {
                  
            for(k = 0 ; k < i ; k++)
                   
            {
                     
            if(a[i] > a[k])
                     
            {
                        
            int q = s[k] + 1 ;  
                        
            if(s[i] < q) 
                         
            {
                           s[i] 
            = q ;
                           p[i] 
            = k ;       
                         }

                     }
                         
                   }
                     
                }
             
               
               
            int max = 0 ;  
               
            for(i = 0 ; i < n ;i++)  
               
            {
                
                   
            if(s[max] < s[i])  
                      max 
            = i ;     
               }

                 printf(
            "%d\n" , s[max]) ;

             
               
            while(1)
               
            {
                printf(
            "%d->" , a[max]) ;      
                
            if(max == 0)
                 
            break ;
                max 
            = p[max] ;    
               }

               
                 system(
            "pause");
                
            return 0 ;   
             }
             

            posted on 2011-04-21 14:11 kahn 閱讀(1908) 評(píng)論(3)  編輯 收藏 引用

            Feedback

            # re: 動(dòng)態(tài)規(guī)劃法-----最長(zhǎng)增序子序列(非連續(xù)) 2011-08-10 17:14 wangyan

            讀師兄博客受益匪淺。。
            PS:我覺(jué)得if(max == 0)
            打印的時(shí)候應(yīng)當(dāng)改為if(max==P[max])
            不然的話,若增序列不是從第一個(gè)開(kāi)始,比如100 1 2 3 4,就會(huì)死循環(huán)。  回復(fù)  更多評(píng)論   

            # re: 動(dòng)態(tài)規(guī)劃法-----最長(zhǎng)增序子序列(非連續(xù)) 2011-08-20 17:46 杜明

            @wangyan
            我的垃圾博客就怕誤人子弟,我都是很隨意的寫(xiě)的。
            http://blog.csdn.net/v_JULY_v/
            這個(gè)網(wǎng)址是csdn上一個(gè)大牛寫(xiě)的,非常好。各種算法還有分析。推薦你看看。  回復(fù)  更多評(píng)論   

            # re: 動(dòng)態(tài)規(guī)劃法-----最長(zhǎng)增序子序列(非連續(xù)) 2011-08-20 17:47 杜明

            我的垃圾博客就怕誤人子弟,我都是很隨意的寫(xiě)的。
            http://blog.csdn.net/v_JULY_v/
            這個(gè)網(wǎng)址是csdn上一個(gè)大牛寫(xiě)的,非常好。各種算法還有分析。推薦你看看。  回復(fù)  更多評(píng)論   



            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产亚洲精久久久久久无码77777| 97精品依人久久久大香线蕉97 | 99精品国产99久久久久久97 | 久久久国产视频| 亚洲国产另类久久久精品小说| 亚洲精品无码久久一线| 久久精品视频网| 亚洲精品无码久久不卡| 亚洲国产精品久久电影欧美| 久久这里只有精品首页| 国产激情久久久久久熟女老人| 国产精品久久久久久搜索| 欧美午夜精品久久久久久浪潮| 热re99久久6国产精品免费| 国产成人久久精品麻豆一区| 亚洲国产精品无码久久久秋霞2 | 无码国产69精品久久久久网站| 热re99久久精品国产99热| 久久久久久久91精品免费观看| 99国产欧美精品久久久蜜芽 | 国产成人精品久久综合| 久久国产精品77777| 久久强奷乱码老熟女网站 | 亚州日韩精品专区久久久| 久久er国产精品免费观看2| 无码人妻久久久一区二区三区 | 99久久精品这里只有精品| 亚洲午夜久久久影院| 久久久久久免费视频| 亚洲欧洲中文日韩久久AV乱码| 丁香久久婷婷国产午夜视频| 99久久中文字幕| 久久精品成人国产午夜| 国产精品无码久久综合 | 久久艹国产| 久久夜色撩人精品国产| 久久精品国产亚洲5555| 久久亚洲2019中文字幕| 伊人精品久久久久7777| 伊人久久无码精品中文字幕| 久久亚洲国产成人影院|