
dp
动态规划
笨媛
主人太懒
展开
-
KMP算法
KMP算法常用于字符串匹配问题,即从一个串中找另一个串是否为这个串的子串。 (此图为转载https://blog.youkuaiyun.com/x__1998/article/details/79951598) KMP算法与传统算法不同的是当发现主串与目标串匹配不同的时候,不是像传统算法那样每次只把目标串往后移一位,KMP通常会根据next数组移动,移动位数 = 已匹配的字符数 - 不匹配前一位的n...原创 2020-03-18 20:55:34 · 205 阅读 · 0 评论 -
需要用getchar()吃掉回车的几种情况
1.前面有scanf(这里scanf可以是任意类型,包括一个字符的情况),后面有 scanf("%c",ch); 2.前面有scanf,后面有gets(s); 3.两个接收字符的ch=getchar(); 暂时写这几种情况,后面遇到了再补充。 ...原创 2020-01-14 17:17:23 · 1276 阅读 · 0 评论 -
栈的基本题目 出错了
1.栈的基本操作题目链接 错误代码:(我输入的是字符) #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n,m,T,i,x; char s; int a[1001]; scanf("%d",&T); while(T--) ...原创 2022-07-05 14:27:22 · 212 阅读 · 0 评论 -
01背包问题和完全背包问题
01背包 01背包字面意思来看0就是不拿,1就是拿,且每次只能拿一个物品放入背包。 开二维数组的状态方程: 此情景为往固定容量的背包里装物品,使包内物品为最大价值 实际上就是在每个物品的基础上,遍历所有可能的背包空间,如果放得下去就比较放与不放对价值的影响 一维数组的状态方程: ...原创 2020-01-12 11:20:22 · 9550 阅读 · 0 评论 -
递归调用——汉诺塔问题
递归问题一直是我没弄懂的问题,就是不明白递归在调用函数的时候实现过程是怎么一回事,递归函数在调用的过程中代码的执行顺序是怎样的,看到有博主做了一个很形象的解释:说从前有座山,山里有座庙,庙里有个老和尚,老和尚在讲故事,故事是说从前有座山,山里有座庙,庙里有个老和尚,老和尚在讲故事,故事是说从前有座山,山里有座庙,庙里有个老和尚,老和尚在讲故事。。。。。。对,就是这种反复循环我不懂; 现就汉诺塔问题...原创 2020-01-11 10:45:52 · 969 阅读 · 1 评论 -
dp实现关于子序列问题
1.最长上升子序列的长度 代码实现: 状态转移方程: len(1)=1; len(k)=max{len(i):1<i<k且ak>ai且k!=1}+1; 2.上升序列的最大和 注意:最长的上升子序列的和不一定是最大 代码实现: 状态方程: s(1)=a[1]; s(k)=max{s(i):1<i<k且ak>ai且k!=1}+a[k]; 3.最长公共子序列的...原创 2020-01-10 16:36:41 · 203 阅读 · 0 评论 -
关于冒泡排序的两种书写
冒泡排序 假设共有n个数据需要按从小到大的顺序排序 法一: 常用方法,数组下标从0-n;(注意图中灰色部分为区分重点) 法二: 数组下标从1-n的情况; ...原创 2020-01-09 21:31:12 · 220 阅读 · 0 评论 -
单链表的拆分
数据结构实验之链表九:双向链表 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内存中找到下一个位置,这是一个不会轻易断裂的链。但单链表有一个弱点——不能回指。比如在链表中有两个节点A,B,他们的关系是B是A的后继,A指向了B,便能轻易经A找到B,但从B却不能找到A。一个简单的想法便能轻易解决这个问题——建立双向链表。在双向链表中,A有一个指针指向了节点B,同时,B又有一个指...原创 2019-12-25 19:45:02 · 521 阅读 · 0 评论