動態規劃 劃分為回文串

2021-08-07 21:16:45 字數 1087 閱讀 2236

題意:

輸入乙個字串,問最少可以將它劃分成多少個回文串。

思路:可以設定dp[i]為從第乙個字元到第i個字元之間最少可以劃分的回文串,然後設1<=j<=i,如果s[j+1]~s[i]是回文串那麼dp[i]=min(dp[j]+1)

o(n的三次方)寫法,20ms

#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

#pragma comment(linker, "/stack:102400000,102400000")

using namespace std;

const int maxn=1010;

char s[maxn];

int dp[maxn];

int len;

bool check(int a, int b)

{ int left=a, right=b;

while(a

o(n方)寫法,事先打表將回文串標記,30ms。。。

#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

#pragma comment(linker, "/stack:102400000,102400000")

using namespace std;

const int maxn=1010;

bool wtf[maxn][maxn];

int dp[maxn];

char s[maxn];

int len;

void init()

{ memset(wtf, 0, sizeof(wtf));

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

wtf[1][i]=true;

if(len==1)

return;

for(int i=1; i

估計是資料比較弱,導致o(n方)的寫法比o(n的三次方)要慢。。。

回文串劃分(動態規劃)

題目描述 給出乙個字串 s,對這個字串進行切分,每個子串都必須是乙個回文字串,問最少要切多少次。example 給出 s aab 返回最少切分次數 1。因為只需要一次切分就能把 s 切分成符合要求的兩個子串 aa b 暴力法 列舉起點和終點去求該區間字串的最長回文字串 時間複雜度o n 2 找到後就...

動態規劃 劃分型 能量項鍊

能量項鍊 總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於...

最長回文串 動態規劃)

半對 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路一 翻轉字串法。1.將整個字串反轉,然後判斷原始的字串是否在反轉的字串 現。2.只是出現還不...