輸入乙個字串,摺疊成乙個盡量短的串。問最短可以摺疊成什麼樣子的乙個串。
設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個...