当前位置: 首页 > news >正文

hdu 2476(第一道区间dp)

题意:就是给定两个字符串,第一个是初始串,第二个是目标串,问你把初始串变到目标串最少需要多少串!

分析:此题分两步,第一步是假设开始的初始串是空串,然后就进行区间dp,dp[i][j]代表把区间[i,j]变到与目标串相同的时候最少需要的步数,所以可以初始化dp[i][j]=dp[i+1][j]+1;

然后如果str2[i]==str2[k]就可以有dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j])。具体看代码实现吧!

代码实现:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int dp[105][105],res[105];
char str1[105],str2[105];

int min(int x,int y)
{
    return x<y?x:y;
}

int main()
{
    int i,j,k,len;
    while(scanf("%s%s",str1,str2)!=EOF)
    {
       len=strlen(str1);
       memset(dp,0,sizeof(dp));
       for(j=1;j<=len;j++)
       {
           for(i=0;i<len-j+1;i++)
           {
               dp[i][i+j-1]=dp[i+1][i+j-1]+1;
               for(k=i+1;k<=i+j-1;k++)
               {
                  if(str2[i]==str2[k])
                      dp[i][i+j-1]=min(dp[i][i+j-1],dp[i+1][k]+dp[k+1][i+j-1]);
               }
           }
       }

       for(i=0;i<len;i++)
           res[i]=dp[0][i];

       for(i=0;i<len;i++)
       {
           if(str1[i]==str2[i])
           {
               if(i==0)
                   res[i]=0;
               else
                   res[i]=res[i-1];
           }
           else
           {
               for(j=0;j<i;j++)
                   res[i]=min(res[i],res[j]+dp[j+1][i]);
           }
       }

       printf("%d\n",res[len-1]);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/jiangjing/p/3691700.html

相关文章:

  • 图像添加噪声【OpenCV学习笔记1】
  • c++ is on the way 7:显式构造函数
  • 安卓学习方法
  • 一个C#的XML数据库访问类
  • 图像的像素点操作【OpenCV学习笔记3】
  • 简单弹出视图
  • 文件的保存【OpenCV学习笔记4】
  • 清除vs2005、vs2008起始页最近打开项目
  • 51单片机-红外遥控解码
  • 汇编实验课程设计1
  • [转]实验室小科普之:方便又健康——洗水果的学问
  • C++ is on the way 8: 类初始化列表的分析总结
  • 异步DNS解析的实现
  • 图像绘制功能【OpenCV学习笔记5】
  • nopCommerce 3.3正式发布及新增功能改进
  • 【347天】每日项目总结系列085(2018.01.18)
  • canvas 高仿 Apple Watch 表盘
  • Consul Config 使用Git做版本控制的实现
  • Cookie 在前端中的实践
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • gulp 教程
  • Java比较器对数组,集合排序
  • vue的全局变量和全局拦截请求器
  • 码农张的Bug人生 - 初来乍到
  • 区块链技术特点之去中心化特性
  • 消息队列系列二(IOT中消息队列的应用)
  • 携程小程序初体验
  • 主流的CSS水平和垂直居中技术大全
  • 如何正确理解,内页权重高于首页?
  • #14vue3生成表单并跳转到外部地址的方式
  • $.ajax()
  • (003)SlickEdit Unity的补全
  • (14)Hive调优——合并小文件
  • (2.2w字)前端单元测试之Jest详解篇
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)springcloud实战之config配置中心
  • (二)windows配置JDK环境
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (七)理解angular中的module和injector,即依赖注入
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Google的Objective-C编码规范
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [1181]linux两台服务器之间传输文件和文件夹
  • [30期] 我的学习方法
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)