摘要: 题目描述 书有4种,每种价格不同,每本书可以无限买,问刚好花m块钱的方案数? f1-完全背包 基本分析 完全背包裸题 代码 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const i 阅读全文
posted @ 2023-03-30 15:01 zhangk1988 阅读(20) 评论(0) 推荐(0)
摘要: 题目描述 给了n个正整数,希望选出若干个,然他们的和是m,求方案数? f1-01背包求恰好为m的方案数 基本分析 恰好为m怎么考虑?定义状态的时候就地成恰好为j 属性怎么修改?+之前的方案数 初始化?f[0] = 1 代码 #include <iostream> #include <algorith 阅读全文
posted @ 2023-03-30 14:36 zhangk1988 阅读(41) 评论(0) 推荐(0)
摘要: 题目描述 收服小精灵需要两个代价,精灵球和体力值,问满足以上数量限制下的能收服的物品数? f1-01背包+双重花费 基本分析 相比于常规01背包,变化在哪?限制条件是独立的两个维度 最大数量下对应的最小的体力怎么找?满足值相等的条件下,让k尽量的小 代码 #include <iostream> #i 阅读全文
posted @ 2023-03-30 14:08 zhangk1988 阅读(40) 评论(0) 推荐(0)
摘要: 题目描述 给了一个箱子的总体积是V,同时有n件物品,每件的都有一个体积,问怎么去可以让剩余空间最小? f1-01背包-没有显式给价值 基本分析 剩余空间最小?占用的体积最大 01背包的价值是啥?也是v 代码 #include <iostream> using namespace std; const 阅读全文
posted @ 2023-03-30 13:42 zhangk1988 阅读(28) 评论(0) 推荐(0)
摘要: 题目描述 给了时间m和n组草药[代价、价值],问m时间内能采到的最大价值? f1-01背包 基本分析 01背包裸题 代码 #include <iostream> #include <algorithm> using namespace std; const int N = 1010; int f[N 阅读全文
posted @ 2023-03-30 12:00 zhangk1988 阅读(25) 评论(0) 推荐(0)
摘要: 题目描述 给两个数组,求数组的公共最长上升子序列? f1 LCS + LIS + 3重循环 基本分析 状态定义的线索?(1)需要包含两个数组;(2)需要考虑到上升的限制; 状态集合?f[i][j]表示a中以前i,b中前j,且以b[j]结尾的最长公共上升子串集合; 状态属性?集合中子序列长度的最大值 阅读全文
posted @ 2023-03-29 23:15 zhangk1988 阅读(28) 评论(0) 推荐(0)
摘要: 题目描述 求数组中最少去掉多少个元素,可以让剩下的队形保持为^的形状? f1-计算数组+枚举峰值+计算最小出列值 基本分析 是登山的简单变形 代码 #include <iostream> #include <cstring> #include <algorithm> using namespace 阅读全文
posted @ 2023-03-29 17:40 zhangk1988 阅读(19) 评论(0) 推荐(0)
摘要: 题目描述 给一个数组,求满足^形状的最长长度。 f1-预处理数组+枚举峰值点 基本分析 每一个点都可能是峰值点,需要每次都计算2次最长上升子序列吗?不需要,全部计算完再枚举 怎么转化i到n-1的最长下降子序列?从n-1到i的最长上升子序列 代码 #include <iostream> #includ 阅读全文
posted @ 2023-03-29 17:27 zhangk1988 阅读(50) 评论(0) 推荐(0)
摘要: 题目描述 给一个正整数数组,可以选起点和方向,问最长的严格下降子序列的长度? f1-求两次最长上升子序列 基本分析 可以选方向怎么考虑?枚举左或者右 可以选起点怎么考虑?枚举i。向左滑翔,从0到i的最长上升子序列长度;向右滑翔:从n-1到i的最长上升子序列长度 代码 #include <cstrin 阅读全文
posted @ 2023-03-29 17:11 zhangk1988 阅读(91) 评论(0) 推荐(0)
摘要: 题目描述 从数组中找一个连续子数字,对子数组升序的时候,数组就是升序的。 求最短的子数组的长度? f1排序+双指针 基本分析 如果排序后怎么找?左边第一个不等的点和右边第一个不等的点 代码 class Solution: def findUnsortedSubarray(self, nums: Li 阅读全文
posted @ 2023-03-24 20:01 zhangk1988 阅读(40) 评论(0) 推荐(0)
摘要: 题目描述 给一个数组nums,数组是循环的,求每个元素的下一个元素 f1-xxx 基本分析 循环数组的情况怎么考虑?拉直或者下标取余数 剩下怎么解决?常见的单调递减栈 代码 左到右 class Solution: def nextGreaterElements(self, nums: List[in 阅读全文
posted @ 2023-03-22 14:12 zhangk1988 阅读(15) 评论(0) 推荐(0)
摘要: 题目描述 nums2中元素都不同,num1是nums2的一个子集。 需要找出nums2中每个元素下一个更大的元素,在映射回nums1中? f1-哈希表+左到右的单调栈 基本分析 向右找最近的更大的值,维护递增栈还是递减的栈,是严格的吗?需要维护非严格递减的栈,例如43342,33都会入栈。 找到的逻 阅读全文
posted @ 2023-03-22 12:58 zhangk1988 阅读(21) 评论(0) 推荐(0)
摘要: 题目描述 给了一个字符串百奥是的非负整数num和整数k,问怎么移除其中的k个数字,让剩下的数字最小? f1-单调栈 基本分析 怎样的数字是最小的?单调递增排序的 带有约束k怎么考虑?只要栈非空+栈顶>d+ 还有k就能一直删 k没用完怎么办?字符是单调增的,从后往前删k次(k被维护过) 结果怎么得到? 阅读全文
posted @ 2023-03-21 19:59 zhangk1988 阅读(21) 评论(0) 推荐(0)
摘要: 题目描述 给了两个数组nums1和nums2,数组内元素由0-9构成,需要从两个数组中选出k个数字,并且每个数组中值数字的相对位置不能变,怎样才能组成的值最大? f1 单调栈 基本分析 能感觉到对每个数组需要维护一个递减栈,这是是两个数组的问题,怎么处理?每个数组维护一个 怎么能保证两个数组子序列合 阅读全文
posted @ 2023-03-21 19:37 zhangk1988 阅读(28) 评论(0) 推荐(0)
摘要: 题目描述 给了一个字符串s,需要删除重复的字符。 要求是(1)每个字母只保留一次;(2)结果的字典序最小 f1-贪心+单调栈 基本分析 如果给定一个s,只能删除一个,怎么删可以使字典序最小?从左到右删除第一个s[i]>s[i+1]的值,比如456651,删除第二个6;987,删除9。 结合上面的思路 阅读全文
posted @ 2023-03-21 16:20 zhangk1988 阅读(23) 评论(0) 推荐(0)