cf 1077f2 基礎dp 單調雙向佇列

2021-09-11 01:44:53 字數 727 閱讀 7880

n個數ai組成的序列,在這n個數中選x個數,保證任意k個相連的數有1個數被選中。求這n個數中選x個數的最大和。

n <= 5000。

1.dp[i][j]表示前i個數選j個數且其中包括第i個數的最大和。

2.dp[i][j] = max(dp[m][j-1] + a[j]) , m∈[max(0 , i - k) , i)。

3.這道題因為n的原因o(n^3)的方法過不了,得把第三層迴圈變成乙個單調佇列,這樣複雜度就降為了o(n^2)。

因為dp[m][j - 1]中m是不確定的,j-1是確定的,所以第一層迴圈變為j,第二層迴圈變成i。

4.舉個例子:假如當前在計算dp[5][j],雙向佇列內有2,3,4,2符合題意正在用,而dp[4][j-1]#define n 5005

using namespace std ;

int n , k , x , m ;

long long dp[n][n] ;

deque q ;

int main()

q.clear() ;

}ans = -1 ;

for(i = max(x , n - k + 1) ; i <= n ; i ++)

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

if(ans < 0)

ans = -1 ;

printf("%lld" , ans) ;

}

cf 1326d2 關於kmp的思維題

題意給你乙個字串,你選擇字串的乙個字首和乙個字尾拼接成乙個回文串,輸出最長的可能的回文串。字首和字尾不能有疊加部分,每組測試樣例包含t個字串。樣例輸入 1poabbacefop 樣例輸出 poabbaop 思路 你可以先分離出兩邊一樣的部分,比如測試樣例可以變成po abbacef op 顯然po是...

Egret Engine 2D基礎教學

1.基本概念 2.可視屬性 可視屬性用來定量描述顯示物件在舞台中的顯示狀態,結合下圖說明可視屬性的含義。如上圖1所示,在egret中定義舞台的座標系 原點在螢幕左上角。橫軸使用x表示,向右為正。縱軸使用y表示,向下為正。上圖1中包含乙個灰色的矩形,該矩形擁有乙個 錨點 egret使用該點的座標表示矩...

cocos2d基礎知識

1.精靈的建立 精靈的建立 ccsprite player ccsprite create xx.png player setposition ccp x,y this addchild player 2.選單的建立 選單的使用 ccmenuitemimage item ccmenuitemimag...