hihoCoder1690 動態規劃

2022-05-29 08:30:20 字數 1104 閱讀 5318

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

給定乙個只包含aeiou的字串s,請你找到其中的最長的子串行,滿足:

1. 所有的a都在e和i之前,所有的e都在i之前;

2. 所有的o都在u之前。  

輸出最長滿足條件的子串行的長度。  

例如對於s = aeiouaeiou,滿足條件的最長的子串行有 aoaeiou, aeiouiu等。長度都是7。

輸入只有一行,字串s。  

對於50%的資料,1 ≤= |s| ≤ 1000  

對於100%的資料,1 ≤= |s| ≤ 1000000

乙個整數,表示答案。

樣例輸入

aeiouaeiou
樣例輸出

7

分析:最長子列必有a->e->i,o->u,先求所有a在e前,所有e在i前的最長子列,

再求所有o在u之前的最長子列,答案為兩個最長子列的和,

設maxa,maxe,maxi分別表示前k個字元中以a,e,i結尾的最長子列長度,

則 maxa=maxa+1,s[k]=='a';

maxe=max(maxa,maxe)+1,s[k]=='e';

maxi=max(maxa,maxe,maxi)+1,s[k]=='i';

同理,maxo,maxu分別表示前k個字元中以o,u結尾的最長子列長度,

則 maxo=maxo+1,s[k]=='o';

maxu=max(maxo,maxu)+1,s[k]=='u';

最後結果為maxi+maxu

#include#include

#include

using

namespace

std;

int max(int a,int b,int

c)char s[2000000

];int

main()

printf(

"%d\n

",maxu+maxi);

return0;

}

view code

Prince and Princess 動態規劃

題目大意 求兩個序列的最長子序列 include include include includeusing namespace std int n,p,q const int maxn 250 250 int num1 maxn int hash maxn stack maxn int main i...

Colored Rectangles 動態規劃

題意 三種木棍,分別有 r對 g對 b對兩種不同木棍對可以弄移乙個矩形,要求矩形面積總和最大 思路 看題面,這種幾個變數互相影響並且最終目標固定的題目感覺就要用dp,而且資料比較小應該就是能用三維dp,雖然我比賽時沒做出來,但是我想的挺明白的,狀態轉移就是dp i j k max dp i 1 j ...

HihoCoder 1527 動態規劃,貪心

時間限制 20000ms 單點時限 1000ms 記憶體限制 256mb 描述在寫 時,我們經常要用到類似 x a 這樣的語句 a 是常數 眾所周知,計算機進行乘法運算是非常慢的,所以我們需要用一些加法 減法和左移的組合來實現乘乙個常數這個操作。具體來講,我們要把 x a 替換成 x 0 op1 x...