HDU 2476,hdu2476

來源:互聯網
上載者:User

HDU 2476,hdu2476

題目連結:

給定2個長度相等的字串a b

每次可以把a串的任意一段變成一樣的字母。

問把a變成b最少需要幾步。


思路:

1、dp[l][r] 表示把一個Null 字元串K 的[l,r] 變成 對應b[l,r]這段的最小花費。

那麼 dp[l][r] 就是 把 K[l] -> b[l], 然後再把 K[l+1, r] -> b[l+1, r]

即: dp[l][r] = 1 + dp[l+1, r];

但是若存在b[l] =  b[i] ( l+1 <= i <= r)

那就可以先把空串 K[l, i] -> b[l], 然後再對 K[l+1, i] 操作。

所以若 b[l] == b[i] 則 dp[l, r] = dp[l+1, i] + dp[i+1, r];

若 b[l]!=b[i] ,那K[l] 變成b[l] 還是需要一步操作, : dp[l, r] = dp[l+1, i] + dp[i+1, r] +1;

2、ANS[i] 表示把a[1,i] -> b[1,i]的最小花費,簡單dp,不再贅述


#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cstring>#include <cmath>using namespace std;const int inf = 1000000;const int N = 105;char s1[N], s2[N];int dp[N][N], len;//計算把空串的[i,j]段變成s2的[i,j]段需要的最少花費int dfs(int l, int r){    if(l > r)return 0;    if(dp[l][r] != -1) return dp[l][r];    if(l == r) return dp[l][l] = 1;    int ans = inf; //變第l個字元為 s2[l]    for(int i = l+1; i <= r; i++)    {        int tmp = dfs(l+1, i) + dfs(i+1, r);        if(s2[l] == s2[i])//變[l,i]字元為s2[l] ,這樣單獨變l 這步可以合并到變[l,i]這步裡            ans = min(ans, tmp);        else            ans = min(ans, tmp+1);    }    return dp[l][r] = ans;}void cal_dp(){    memset(dp, -1, sizeof dp);    for(int i = 1; i <= len; i++)        for(int j = i; j <= len; j++)            dfs(i, j);}int ANS[N];//把s1前i位變成s2的最小花費void find_ans(){    ANS[1] = (s1[1] != s2[1]);    for(int i = 2; i <= len; i++)    {        ANS[i] = dp[1][i];//空串變成s2的花費        if(s1[i] == s2[i])            ANS[i] = ANS[i-1];        else        {            for(int j = 1; j < i; j++)                ANS[i] = min(ANS[i], ANS[j]+dp[j+1][i]);        }    }}int main(){    while(~scanf("%s", s1+1)){        scanf("%s", s2+1);        len = strlen(s1+1);        cal_dp();        find_ans();        printf("%d\n", ANS[len]);    }    return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.