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