P2766 最長不下降子串行問題

2021-09-26 08:02:12 字數 797 閱讀 9470

話不多說,直接上思路。其實這就是一道dp動態規劃的經典問題,首先鏈上題目描述[( ]

問題描述

設有整數序列b1,b2,b3,…,bm,若存在 i1 < i2 < i3 < … < in,且 bi1 <= bi2 <=bi3 <=…<=bin,則稱b1,b2,b3,…,bm中有長度為n的不下降序列bi1,bi2,bi3,…,bin。求序列中最大不下降子串行長度k。

我們來理一下思路,因為題目中是要求子串行的長度,那麼可以通過動態規劃的基本思想來考慮。要求最大子串行的長度,那其實只要每次求出更小段的最優怎嗎求出來,這樣從小的推到大的然後逐次退出全域性最優解。注意dp的時間複雜度是o(n^2),還有一點:資料範圍!資料範圍!資料範圍重要的事情說三遍!第一次因為資料範圍幾乎爆零。那麼,如何記錄lis所選的是哪些數字,其實用dp的話就是dp[n][3]: dp[i][0]:表示數值 dp[i][1]:表示長度 dp[i][2]:表示所連線下乙個數字的下標

(接近尾聲)

接下來說一下dp最重要的狀態轉移方程:

dp[i]=max(dp[i],dp[j]+1);

好了,這是本蒟蒻第一次發博,還是有些開始沒弄明白,還希望各位dalao 多多關照!!!!!

#include#includeusing namespace std;

int dp[100000],a[100000];

int main()

int ans=0;

for(int i=1;i<=n;++i)

}ans=max(ans, dp[i]);

}cout祝大家天天ac!!!!!

P2766 最長不下降子串行問題

問題描述 給定正整數序列x1,xn 1 計算其最長不下降子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的不下降子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的不下降子串行。程式設計任務 設計有效演算法完成 1 2 3 提出的計算任務。輸入...

P2766 最長不下降子串行問題

通俗的,對於每個數只能取一次和取無限次,將點拆開加入邊約束 因為讓求最長上公升子串行的個數,所以當乙個數字被選擇時,它必須是最長上公升子串行的一部分 我們求出最長上公升子串行的 dp 陣列,當 x 可以連邊 y 當且僅當 y 在 dp 中可以從 x 轉移過來 這樣問題就顯然了,我們只需要求解 dag...

24題 P2766最長不下降子串行問題

網路流是個好東西,希望我也會。網路流?orz zsy 考慮我們是如何 dp 這個 lis 的。我們是倒著推,設定 dp i 代表以 i 為起點的 lis 是多少。轉移太顯然了 dp i max 1,data i le data j 想一想乙個合法的 lis 方案代表著什麼,代表著它是由這個式子乙個乙...