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法式算法設計的進修有所贊助。