
动规如此简单
文章平均质量分 66
to find the fastest way fhrough a factory
云疏不知数
一个人知道自己为了什么而活,他就能够忍受任何一种生活----尼采
展开
-
动规如此简单
1.递归的本质 看一个递归的例子 看一个递归的题目:对称的二叉树2.动规1 动规之开门见山 Fibonacci 变态青蛙跳台阶 经典青蛙跳台阶 矩形覆盖 最大连续子数组和 字符串分割(Word Break)3.动规2 三角矩阵(Triangle) 路径总数(Unique Paths) 路径总数(Unique Paths II) 最小路径和(Minimum Path Sum) 背包问题(也称01背包问题)4.动规3 回文串分割(Palindr.原创 2021-04-28 21:00:39 · 1989 阅读 · 9 评论 -
4.动规3
回文串分割(Palindrome Partitioning)给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s=“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。“aab”问题将字符串s分割成回文分割结果的最小切割数状态字符串前i个字符的最小分割分割的段数,也就是最小分割数+1“aab”F[0] = 1–>“a”F[1] = is(str[j, 1])?(j>0?F[j-1]+1:1).原创 2021-04-25 20:19:26 · 435 阅读 · 3 评论 -
3.动规2
三角矩阵(Triangle)问题从顶点到最后一行的最小路径和[[20],[30,40],[60,50,70],[40,10,80,30]]状态F[0,0]到F[i,j]的最小路径和可走路径:F[i,j]–>F[i+1,j],F[i+1,j+1]F[i-1, 0]–>F[i,0] (第i行第一个)F[i-1, n-1]–>F[i, n-1] (第i行最后一个)转移方程F[i,j] = F[i,j] + min(F[i-1, j], F[i-1, j-1]).原创 2021-04-25 20:18:55 · 439 阅读 · 0 评论 -
2.动规1
动态规划是分治思想的延申动态规划具备的特点把原来的问题分解成几个相似的子问题所有的子问题都只需要解决一次按需求存储存储子问题的解本质动态规划的本质是,对问题状态的定义和状态转移方程的定义(状态以及状态之间的转移关系)对子问题的抽象,抽象出来的东西就是状态的定义,状态的定义是不是有效的是不是合理的,可以和最终问题对应起来,看某一个状态能不能对应到问题的解,或者某几个状态它能不能对应到问题的解,如果可以,说明差不多是合理的,需要进一步确认,状态之间能不能形成递推的关系,能不能找到这样的转移方.原创 2021-04-25 20:18:41 · 673 阅读 · 1 评论 -
1.递归的本质
举一个递归的例子#include <iostream>using namespace std;void func(int n) { if (n >= 10) return ; int i = 0; i++; printf("%d\n", i); func(n+1);}int main() { func(0); return 0;}打印输出的是一堆1,局部变量在递归的过程中依然保持局部变量的生命周期和作用域,那么递归的关键因素就是形参了看一个递归的题目对称.原创 2021-04-25 20:17:46 · 533 阅读 · 0 评论