題意:
輸入乙個字串,問最少可以將它劃分成多少個回文串。
思路:可以設定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.只是出現還不...