动态规划
动态规划详解与题型
Py_Heee
全国大学生it技能大赛决赛三等奖,蓝桥杯省一等奖,电子设计大赛省二等奖,中国机器人及人工智能大赛省三等奖。目前学习涉及领域有机械臂,机器视觉,程序设计。
展开
-
[LCS匹配型动态规划]
通配符匹配LintCode 炼码最长公共子序列LintCode 炼码如果第i个字符和第j个字符不相等,则看看去掉第i个的lcs大还是去掉第j个的lcs大,即如果相等保险点就都写上 因为存在公共部分,综上编辑距离LintCode 炼码如果第i个字符和第j个字符相等,我们可以有三种改法,我们不知道哪种该法要好,就直接让他们自己去比较进行了,第一种是将是将s1的第i个字符删去操作加1,dp[i-1][j]+1第二种是将是将s1后加个相同的字符然后去和s2的j-1比较,dp[i][j-原创 2022-06-15 17:08:38 · 277 阅读 · 0 评论 -
【动态规划】自顶向下,自低向上
dp[i][j]:从(0,0)走到(i,j)dp[i][j]:从i走到j,当步长不为一时数字三角形:自底向上:l=[]n=len(l)dp=[[0*(i+1)] for i in range(n)]for j in range(n-1): dp[n-1][j]=l[n-1][i]for i in range(n-1,-1,-1): for j in range(i+1): dp[i][j]=min(dp[i-1][j],dp[i-1][j-1.原创 2022-05-11 13:40:17 · 366 阅读 · 0 评论 -
【动态规划】背包问题的几种变形
1,最小划分LintCode 炼码给出一个正整数数组,写一个程序把这个整数数组分成S1跟S2两部分,使S1中的和跟S2中的和的差的绝对值最小。换句话讲,如果有一个一个整数数组 S 有 n 个数,如果Subset1有 m 个数,Subset2必须有 n-m 个数并且 abs(sum(Subset1) – sum(Subset2)) 应该最小。 #x,sum-x #sum-x-x最小 #x最接近sum/2 #转换成01背包sum/2就.原创 2022-05-15 19:23:46 · 635 阅读 · 0 评论 -
【区间型动态规划】
dp[i][j]:i,j分别表示字符串的首尾索引我们知道,大区间的结果总是依赖于小区间,由此#初始化dp[n-1][n-1]=Truefor i in range(n-1): dp[i][i]=True #一个字符肯定是回文 dp[i][i+1]=s[i]==s[i+1] #两个字符是否是回文for i in range(n): for j in range(i+2,n): dp[i][j]=dp[i+1][j-1] a...原创 2022-05-15 21:59:30 · 342 阅读 · 0 评论 -
【动态规划】
使用场景:有方向(无环,无相反方向)求最值,求可行性,只求方案总数题型分类:坐标型,前缀型(划分型:一个字符串划分,匹配性:两个字符串匹配),背包型,区间型,博弈型,树型,状态压缩型(TSP问题)。坐标型,可行性+最值grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0]]n=len(grid)m=len(grid[0])dp=[[float('inf')]*m for _ in range(n)]dp[0][0]=0for j in range原创 2022-05-12 16:57:14 · 170 阅读 · 0 评论 -
[LIS接龙型动态规划]
dp【i】:表示以第i个数为龙尾的最长的龙有多长dp【i】=max{dp【j】+1},j<i&&nums【j】<nums【i】initialization:dp【0..n-1】=1 answer:max{dp【0..n-1】原创 2022-05-21 20:15:35 · 212 阅读 · 0 评论 -
【动态规划】背包问题
注意:for j in range(1,m+1):是枚举所有的情况,不用一一判断放入物品后背包容量减少后j的变化。为什么从1开始,因为0已经写出来了,即dp[i-1][j]=dp[i-1][j-0*a[i-1]]+0*v[i-1]。01背包无价值n=len(a)dp=[[False]*(m+1) for i in range(n+1)]dp[0][0]=Truefor i in range(1,n+1): dp[i][0]=True for j in range(1,m+1)原创 2022-05-15 12:24:08 · 1036 阅读 · 0 评论 -
[动态规划求方案数]
质数分解原创 2022-06-16 19:38:12 · 192 阅读 · 1 评论