題意:乙個字串刷子,每次可以將一段連續的字串變成一種顏色,給兩個字串,最少通過幾次可以將第乙個字串轉換為第二個字串;
分析:首先假設第乙個字串和第二個字串全部不相同,那麼怎麼刷成第二個字串?
dp[i][j] 就是將完全不同的字串刷成第二個的最少步數,可以這樣考慮,當中間乙個字串和首字串相同,
可能這樣刷兩次會比較好,當然這兩個狀態已經算出來了;
回到原題;
當兩個字串兩個位置相同 ans[i] = ans[i-1] ,這個字串可以不用刷;
不同,最壞情況就是 dp[1][i];同理,也可以找出兩個部分來有可能更優;
1 #include 2view code3using
namespace
std;45
const
int maxn = 100 + 5;6
char
str1[maxn];
7char
str2[maxn];
8int
dp[maxn][maxn];
9int
ans[maxn];
1011
intmain()
1230}31
}3233 memset(ans,0,sizeof
(ans));
3435
if(str1[1] == str2[1
])36 ans[1] = 0;37
else ans[1] = 1;38
for(int i=2;i<=len;i++) 47}
48}49 printf("
%d\n
",ans[len]);
5051}52
return0;
53 }
UVa 232 字串處理
背景 做了三個半小時,能力堪憂啊,各種除錯,各種出錯,要分析一下,這些錯點盡量不能再錯。學習 1.對於字串陣列,要把每一行都開大一位,該位用來存放 0 否則將會出現未知輸出。也就是說 字串二維陣列的每一行都可以看做乙個字元陣列,結尾都有乙個 0 printf在用 s 格式符輸出字串,總是從給定的首位...
uva11552 字串重排
字串從左到右每k個為一組 保證字串長度是k的倍數 組內字串可以任意移動位置,組間順序不能變換。求變換後最少的塊數。塊的定義 連續相等的字串為乙個快 每一組為乙個單位,因此dp時需要加入組作為一維,又發現計算加入新組後塊的增量,需要知道上一組中最後乙個字元是什麼,因此狀態設計為 dp i j 前i組中...
uva8183(字串處理)
bool vow char ch 是否是母音 void solve vector vec,char ss 將每句話分解為單詞,緊跟在單詞後的標點符號和單詞合併 int judge string s 返回乙個單詞的音節數 if flag s i y s i y 注意y的處理,如果此處的y符合此條件,後...