求最長下降子串行 簡單 就是求方案數比較麻煩點 看了別人的解題報考才懂
也對最長**子串行的理解更深一步
#include#include#includeusing namespace std;
const int maxn = 5005;
int n;
int price[maxn],len[maxn],count[maxn]; //len[i]記錄到i最長下降序列數 count記錄方案數
int maxnum,max_count;
int main()
else if( ( len[j] + 1 ) == len[i] ) //下降序列數相同 方案數相加
count[i] += count[j];
}else if( price[j] == price[i]) //去重
}if( len[i] > maxnum ) //找出最長下降序列數
maxnum = len[i];
} max_count = 0;
for( int i=0; i < n; i ++ ) //統計方案數
printf("%d %d\n",maxnum,max_count);
} return 0;
}
POJ 1952(最長不下降子串行的個數)
求乙個序列的最長不下降子串行的長度,與個數 相同數列算1個 關鍵是如何判重。顯然如果之前有乙個尾數相同且長度相同的序列,哪麼後乙個包含前乙個所有可能的序列相同的序列,故將前乙個序列刪除 重複 program p1952 var n,i,j,ans longint a,len,f,path array...
POJ 1952(最長不下降子串行的個數)
求乙個序列的最長不下降子串行的長度,與個數 相同數列算1個 關鍵是如何判重。顯然如果之前有乙個尾數相同且長度相同的序列,哪麼後乙個包含前乙個所有可能的序列相同的序列,故將前乙個序列刪除 重複 program p1952 var n,i,j,ans longint a,len,f,path array...
最長不下降子串行
a1 t0 an a an 1 2 b an c d n 1 求該序列最長不下降子串行長度 n不是很大顯然可以暴力。n很大呢?那就不斷減迴圈節長度直至減到乙個閾值內,再暴力。正確性顯然,只要閾值不要設太小。include include include define fo i,a,b for i a...