zoukankan      html  css  js  c++  java
  • HDU_3853_区间dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3853

    dp[i][j]表示由空白串刷成b的从i到j位所需要的最小次数。

    然后在比较a和b的每一位,再次更新dp表示由a刷成b的最小次数。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    char a[105],b[105];
    int dp[105][105],ans[105];
    
    int main()
    {
        while(~scanf("%s%s",a,b))
        {
            memset(dp,0,sizeof(dp));
            int len = strlen(a);
            for(int i = 0;i < len;i++)    dp[i][i] = 1;
            for(int i = 1;i < len;i++)
            {
                for(int start = 0;start+i < len;start++)
                {
                    int endd = start+i;
                    dp[start][endd] = dp[start+1][endd]+1;
                    for(int j = start+1;j <= endd;j++)
                    {
                        if(b[start] == b[j])    dp[start][endd] = min(dp[start][endd],dp[start+1][j]+dp[j+1][endd]);
                    }
                }
            }
            if(a[0] == b[0])    dp[0][0] = 0;
            for(int i = 1;i < len;i++)
            {
                if(a[i] == b[i])    dp[0][i] = dp[0][i-1];
                else
                {
                    for(int j = 0;j < i;j++)    dp[0][i] = min(dp[0][i],dp[0][j]+dp[j+1][i]);
                }
            }
            printf("%d
    ",dp[0][len-1]);
        }
        return 0;
    }
  • 相关阅读:
    Mysql数据查询
    Mysql数据类型
    desc和show
    Mysql权限管理
    深入理解inode和硬链接和软连接和挂载点
    Linux用户和组
    VIM文本编辑器
    Linux文件操作
    MySQL基础
    八大排序
  • 原文地址:https://www.cnblogs.com/zhurb/p/5889530.html
Copyright © 2011-2022 走看看