动态规划2

最长递增子序列的问题
给定数组arr,返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9},返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9}所以返回这个子序列的长度为5。
解决方案:
arr:2 1 5 3 6 4 8 9 7
dp:1 1 2 2 3 3 4 5 4
dp[i]表示在必须以arr[i]这个书结尾的情况下,
arr[0..i]中最大递增子序列长度。
dp[i]=maxdp[j]+1,j大于等于0,j小于i,
arr[j]小于arr[i],

给定两个字符串str1和str2,返回两个字符串的最长公共子序列。例如,str1=”1A2C3D4B56”,str2=”B1D23CA45B6A”,“”123456“或者”12C4B6”都是最长公共子序列,返回哪一个都行。

这里写图片描述

背包问题
一个背包有一定的承重W,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大
解决问题:
假设物品编号1到n,一件一件物品考虑是否加入背包,
假设dp[x][y]表示前x件物品,不超过重量y的时候的最大价值。枚举一下第x件物品的情况:
情况一:如果选择第x件物品,则前x-1件物品得到的重量不能超过y-w[x].
情况二:如果不选第x件物品,则前x-1件物品得到的重量不能超过y。
所以,dp[x][y]可能等于dp[x-1][y],也就是不去第x件物品时,价格和之前一样。
也可能是dp[x-1][y-w[x]]+v[x],也就是拿第x件物品的情况
两种可能兴中,应该选择价值最大的那个,dp[x][y]=1/dp[x-1][y]
2.dp[x-1][y-w[x]]+v[x]的最大值
对于dp矩阵来说,行数是物品的数量n,列数是背包的重量,再从上到下以此计算所有的dp值即可。
最优编辑
给定两个字符串str1和str2,在给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价。返回将str1编辑成str2的最小代价。比如,str1=”abc”,str2=”adc”,ic=5,dc=3,rc=2.从”abc”编辑成”adc”,把b替换成d是代价最小的,所以返回2.再比如,str1=”abc”,str2=”adc”,ic=5,dc=3,rc=100.从abc编辑成adc,先删除b,然后再插入d是代价最小的,所以返回8
解决方案
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值