題解 剪紙條 dp

2022-02-23 19:51:39 字數 745 閱讀 4882

hrbust - 1828

網上搜不到題解?那我就來寫一篇吧哈哈哈

最優化問題先考慮\(dp\),設\(dp(i)\)表示將前\(i\)個字元(包括\(i\))分割成不相交的回文子串的最小數目

直接模擬題意轉移即可。初始化寫在裡面了,\(dp(i)=i\)

\[dp(i)=\min\

\]其中\(s[j\dots i]\)是乙個回文串,\(o(n^2)\)預處理回文串即可,注意偶回文串和奇回文串。

剛開始想太多,這道題。以後遇最優化的題一定要花有一定量的時間設計dp,因為dp的操作性強,正確性也比較好驗證,即使後面有其他的解法,dp也可以作為對拍的保障。

//@winlere

#include#include#include#includeusing namespace std;

const int maxn=1e2+5;

char c[maxn];

int dp[maxn],in[maxn][maxn],n;

int main()

for(register int t=1;t<=n;++t)

for(register int i=1;i<=t;++i)

if(in[i][t])

dp[t]=min(dp[t],dp[i-1]+1);

printf("%d\n",dp[n]-1);

}return 0;

}

度度熊剪紙條

ps 改了這麼久,對拍一下就找到錯誤了。貪心,首部出現的1,是不用去剪的,所以當作特殊元素考慮,因此當 k 0的時候 或者 k沒有用完的時候一定要考慮是否用到了首部那一節 cntst 而尾部只需要剪一次,中間的部分需要減兩次,貪心的時候要分別討論 有史以來寫得最醜的 inline bool cmp ...

2018百度之星(A)度度熊剪紙條

度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1 度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊好奇的是,字首 1 的數量最多能是多少。...

hdu6376 度度熊剪紙條

度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊好奇的是,字首 1 的數量最多能是多少。...