標籤:
問題 V: 【動態規劃】機器人軍團時間限制: 1 Sec 記憶體限制: 64 MB
提交: 21 解決: 11
[提交][狀態][討論版]題目描述邪狼:“怎麼感覺這些機器人比我還聰明?不是說人工智慧永遠不能超越人類嗎?”
天頂星人:“你們真是目光短淺,自大而愚蠢!你要知道,如果有意識的智慧生命在無窮無盡的歲月裡居然做不到無意識的宇宙曾做過的事(產生智慧生命),這就好像一隻無知的猴子在琴鍵上跳了億萬年居然跳出了一支貝多芬第九交響曲,而有智慧的生物居然幾千年也學不會一支簡單的小夜曲那樣荒謬。如果說永遠都做不到,那這在你們的哲學裡,不就是神秘論和不可知論了嗎?要知道世事無絕對。”
話說在天頂星人的指導下,修羅王建造了一支機器人軍團,機器人排成一行,且身高分別為b1,b2,…,bn。修羅王準備從中選出一組滿足最長不下降子序列規則的機器人組成一支精銳衛隊。所謂不下降子序列(Longest Increasing Subsequence,LIS)定義為:設有由n個不相同的整數組成的數列b[n],若有下標i1<i2<…<iL且b[i1]<b[i2]<…<b[iL],則稱存在一個長度為L的不下降序列。
例如13,7,9,16,38,24,37,18,44,19,21,22,63,15。有13<16<38<44<63 長度為5的不下降子序列。但經過觀察,實際還有7<9<16<18<19<21<22<63 長度為8的不下降子序列。那麼是不是還有更長的不下降子序列呢?請找出最長不下降子序列的長度。
輸入第一行為n,表示n(n≤100000)個數。第二行為n個數的值。輸出一個整數,即最長不下降序列的長度。範例輸入
41 3 1 2
範例輸出
2
解題思路:做了好幾次的題,結果每次一看卻想不起怎麼做得來了。主要還是對動態規劃的理解不透徹,不大清楚什麼樣的開一維數組,什麼樣的開二維數組。
再就是做題的時候獨立思考太差,總是想看別人的解題過程。
解題參照:http://www.cnblogs.com/TWS-YIFEI/p/5592511.html
代碼:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int a[100005]; 7 int sum[100005]; 8 9 int main()10 {11 int n;12 int maxx=0;13 scanf("%d",&n);14 for(int i=0;i<n;i++){15 scanf("%d",&a[i]);16 }17 sum[0]=1;18 int ans=0;19 for(int i=1;i<n;i++){20 maxx=0;21 int b=0;22 for(int j=0;j<i;j++){23 if(a[i]>a[j]){24 maxx=max(maxx,sum[j]);25 b=1;26 }27 }28 if(b==1){29 sum[i]=maxx+1;30 ans=max(ans,sum[i]);31 }else{32 sum[i]=1;33 }34 }35 printf("%d",ans);36 37 return 0;38 }39 40 /**************************************************************41 Problem: 226342 User: zz1343 Language: C++44 Result: 正確45 Time:240 ms46 Memory:2476 kb47 ****************************************************************/
【動態規劃】機器人軍團