zoukankan      html  css  js  c++  java
  • hdu2476String painter (区间DP)

    Problem Description
    There are two strings A and B with equal length. Both strings are made up of lower case letters. Now you have a powerful string painter. With the help of the painter, you can change a segment of characters of a string to any other character you want. That is, after using the painter, the segment is made up of only one kind of character. Now your task is to change A to B using string painter. What’s the minimum number of operations?

    Input
    Input contains multiple cases. Each case consists of two lines: The first line contains string A. The second line contains string B. The length of both strings will not be greater than 100.

    Output
    A single line contains one integer representing the answer.

    Sample Input
    zzzzzfzzzzz abcdefedcba abababababab cdcdcdcdcdcd

    Sample Output
    6 7
    题意:给定两个字符串a和b,求最少须要对a进行多少次操作,才干将a变成b。每次操作时将a中随意一段变成随意一个字母所组成的段。
    #include<stdio.h>
    #include<string.h>
    int min(int a,int b)
    {
        return a>b?

    b:a; } int main() { int dp[105][105],ans[105]; char a[105],b[105]; while(scanf("%s%s",a,b)>0) { int len=strlen(a); memset(dp,0,sizeof(dp)); for(int r=0;r<len;r++) for(int i=0;i<len-r;i++) { int j=i+r; dp[i][j]=dp[i+1][j]+1; for(int k=i+1;k<=j;k++) if(b[i]==b[k]) dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } for(int i=0;i<len; i++) ans[i]=dp[0][i]; for(int i=0;i<len; i++) if(a[i]==b[i]) { if(i==0)ans[i]=0; else ans[i]=ans[i-1]; } else{ for(int k=0;k<i;k++) ans[i]=min(ans[i],ans[k]+dp[k+1][i]); } printf("%d ",ans[len-1]); } }



  • 相关阅读:
    原生代码实现Promise
    HTTP与HTTPS的区别
    windows常用命令-长期更新
    git 常用命令
    原型和原型链
    vue 中一些API 或属性的常见用法
    移动端屏幕适配
    Nuxt.js(开启SSR渲染)
    vue+element-ui 实现分页(根据el-table内容变换的分页)
    vue中引入jQuery和bootstrap
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7007569.html
Copyright © 2011-2022 走看看