程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話完成最長遞增子序列成績的處理辦法

C說話完成最長遞增子序列成績的處理辦法

編輯:關於C++

C說話完成最長遞增子序列成績的處理辦法。本站提示廣大學習愛好者:(C說話完成最長遞增子序列成績的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話完成最長遞增子序列成績的處理辦法正文


本文實例展現了C說話完成最長遞增子序列成績的處理辦法。分享給年夜家供年夜家參考。詳細辦法以下:

成績描寫:

給定一個序列,找出其最長遞增子序列長度。

好比 輸出 1 3 7 5

輸入 3

算法處理思緒:

應用靜態計劃的思惟,以序列的每一個點最為最右端,找出每一個點作為最右端時的子序列長度的最年夜值,即成績的求解。是以,在盤算後面的每一個點的時刻,將其成果保留上去,前面的點與後面的點的數值停止比擬,假如年夜,則在其長度基本上加1,而且找出一切能夠情形下最長的保留為以後點的長度。構成遞歸。

詳細完成代碼以下:

#include "stdio.h"
#include "stdlib.h"
#define MAXDATA 10000
int main(){
  int data[MAXDATA]; /*數據序列*/
  int lgs[MAXDATA];  /*最長子序列長度*/
  int n,temp,k; /*n 序列長度 temp 子序列長度中央變量 */
  scanf("%d",&n);
  if(n>10000){
     return 0;      
  }
  for(int i=0;i<n;i++){
    scanf("%d",&data[i]);
  }
  for(int i=0;i<MAXDATA;i++){
    lgs[i]=1;  /*給每個序列點作為右端時的最年夜序列長度為1*/
  }
  for(int i=1;i<n;i++){
    temp=1;
    for(int j=0;j<i;j++){ /*與其後面的每個停止比擬*/
      if(data[i]>data[j]){ /*假如數據比後面的某一個的值年夜*/
        if(lgs[i]+lgs[j]>temp){ /*找出該點的最年夜子序列長度*/
          temp=lgs[i]+lgs[j];
        } 
      }
    }
    lgs[i]=temp;
  }
  temp=lgs[0];
  for(int i=1;i<n;i++){
    if(lgs[i]>temp){
      temp=lgs[i];
    }
  }
  printf("%d",temp);
  system("pause");
}

願望本文所述對年夜家C法式算法設計的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved