字元很麻煩,不妨用數字代替(比如1代表'w')
const char c[5] = ;
接著,像這種兩個子串可以合併成另乙個子串的題可以考慮區間$dp$
設$bool$陣列$f_$表示區間$[l,r]$能否合成單個字元$c_k$
於是就可以套區間$dp$的板子了
#include #include #include #include using std::min; using std::max;
using std::sort; using std::swap;
using std::unique; using std::lower_bound;
using std::map;
typedef long long ll;
templatevoid read(t &x)
while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); x *= flag;
}const int len = 2e2 + 10, _ = 5;
const char c[5] = ;
char s[len]; bool p, f[len][len][_];
int num[_], list[len][_], tot, len;
int check(char x)
int main ()
scanf("%s", s + 1), len = strlen(s + 1);
for(int i = 1; i <= len; ++i) f[i][i][check(s[i])] = true;
for(int k = 1; k <= len; ++k)
for(int i = 1; i + k <= len; ++i)
for(int i = 1; i <= 4; ++i)
if(f[1][len][i]) putchar(c[i]), p = true;
if(!p) printf("the name is wrong!");
puts("");
return 0;
}
BZOJ1055 HAOI 玩具取名
某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。第一行四個整數w i n...
BZOJ 1055 HAOI2008 玩具取名
題目 分析 正著想不好搞,狀態太多,也不好轉移,肯定超時。於是我們反著想,將一條字串歸約成乙個字母,首先能想到乙個字串必須要先變成字母,才能變成乙個字母,而且這兩個字母中的第乙個字母一定是由左邊歸約出來的,第二個字母是由右邊歸約出來的。好的思路馬上就來了,我們用dp i j k 表示字串 i,j 能...
BZOJ1055 HAOI2008 玩具取名
標籤 區間dp description 某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個...