UVA 1630 記憶化搜尋

2021-07-27 16:35:16 字數 866 閱讀 3656

輸入乙個字串,摺疊成乙個盡量短的串。問最短可以摺疊成什麼樣子的乙個串。

設dp[i][j]為字串i到j摺疊成最短的字串後的長度,ss[i][j]為字串i到j摺疊成的最短的字串。dfs+記憶化搜尋即可。

輸入的字串右邊界為str.size()-1,需要特別注意。

#include 

#include

#include

#include

#define inf 1e9

using

namespace

std;

int dp[110][110];

string ss[110][110];

string str;

int judge(int l,int r)

}if(re)

return i;

}return0;}

int dfs(int l,int r)

int ans=inf;

int k=0;

for(int i=l;iint len=dfs(l,i)+dfs(i+1,r);

if(len1][r];

dp[l][r]=ans;

int le=judge(l,r);

if(le)

int nu=(r-l+1)/le;

char ch[20];

sprintf(ch,"%d",nu);

string newstr=ch+string("(")+ss[l][l+le-1]+string(")");

if(can&&newstr.size()return dp[l][r];

}int main()

題解 UVA1630 串摺疊 Folding

題目描述 摺疊的定義如下 乙個字串可以看成它自身的摺疊。記作s s x s 是x x 1 個s連線在一起的串的摺疊。記作x s ssss s x個s 如果a a b b 則ab a b 例如,因為3 a aaa,2 b bb,所以3 a c2 b aaacbb,而2 3 a c 2 b aaacaa...

uva 116 (記憶化搜尋)

題意 如圖,從左到右走,每次可以往左上 up 左 fo 左下 dn 走,當走到第一行或最後一行時可以如圖穿越。求一條權值最小的路徑,並列印字典序最小的路徑。解析 狀態轉移方程 dp i j min dp i 1 m m j 1 up dp i j 1 fo dp i 1 m j 1 dn 字典序最小...

uva10626(記憶化搜尋)

題目大意 一瓶可樂需要花8元,自動販售機只收1元,5元,10元。每次插入的錢只能買一瓶。給出n瓶可樂,請問最少插入幾次錢可以買到所需要數量的可樂。思路 一共有以下幾種情況 8個1元 插入8次 3個1元 乙個5元 插入4次 3個1元 乙個10元 插入4次 找5元 1個10元 插入1次 找2 1元 2個...