文章分类 -  动态规划

我很不擅长的一个板块
摘要:原题在这里: 概述题意:一个含两种字符的字符串,问在可修改k个以内字符情况下,最长同种字符长度。 滑动窗口真的绝了: 甚至我还思考了一下为什么不过滤一下窗口中间的最大值,因为是滑动维护。 class Solution { //只要窗口中有任何一个字符出现次数不超过 k,那么这个窗口就是合法的 pub 阅读全文
posted @ 2022-03-31 22:28 Renhr 阅读(62) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述题意:给定数组中,求不相邻最大取值和(首尾也相邻) 我动态规划真的不太行 写了个dfs,TLE class Solution { vector<int> num, vis; int n, ans; void dfs(int x, int y) //下标为x { if (vis[(x 阅读全文
posted @ 2022-03-31 10:36 Renhr 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 经典题目就不多说题意了 1.记忆化广搜 code: class Solution { struct ii { int x, y; ii(int a, int b) : x(a), y(b) {} friend bool operator<(ii a, ii b) { return a. 阅读全文
posted @ 2022-03-30 20:29 Renhr 阅读(35) 评论(0) 推荐(0) 编辑
摘要:原题在这里。 学习链接在这里。 analyse: 我构思了很久,只能想到用bfs是最好的,但是并不能想到具体每一个变换是怎么处理的(头大) 因为打算系统化学习动态规划篇章,所以现在暂时只学习了一个最简单动态规划版本,是理解了,确实非常巧妙,惊叹ing code: class Solution { p 阅读全文
posted @ 2022-03-28 22:27 Renhr 阅读(24) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述题意,一个m*n的地图,从左上角开始,只能右移和下移,问到达右下角有多少种路径。 这属于很简单的dp类型,如果用dfs的话是肯定会T掉的 analyse: 从左和上两侧边界处理为1后,转移方程很简单的是dp[i][j]=dp[i-1][j]+dp[i][j-1] code: cla 阅读全文
posted @ 2022-03-27 11:49 Renhr 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 基于能否到达的基础上,增加了最少次数的条件,且保证一定能够到达。 analyse: mine——定义dp[i]表示到达下标i最少需要次数 那么,初始化有int_max(or 数组长度+1),dp[0]=0 状态转移: 将dp在num[i]范围j取min值(dp[i]+1,dp[i+j] 阅读全文
posted @ 2022-03-27 11:45 Renhr 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述题意: 给定数组num,num[i]表示可以从i开始转移到下一个num数组下标的范围,问能否达到最后一个下标。 理所应当的,很自然的,我想到了dfs 但是dfs效率不高,所以还是写了剪枝——vis标记数组去重。 class Solution { int l; vector<int> 阅读全文
posted @ 2022-03-27 11:34 Renhr 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 概述题意:给定数字字符串,要求可以转换为对应字母字符串的种数。 'A'->1,'B'->2,...'Z'->26 本来写了一个dfs暴力,果然还是TLE了 code: class Solution { int l, ans; string x; void dfs(int i) { if 阅读全文
posted @ 2022-03-27 11:27 Renhr 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题在这里: 题意就不多说了, analyse: 定义dp[i][j]表示两字符串s1[0,i]和s2[0,j]区间的最长公共子序列长度 转移方程: 对于每一个i去遍历s2,有初始化dp[i][j]=max(dp[i-1][j],dp[i][j-1]) 当有匹配位置时候也即s1[i]==s2[j], 阅读全文
posted @ 2022-03-27 10:57 Renhr 阅读(29) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示