动态规划
三二一一二三
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
49.583. 两个字符串的删除操作
class Solution {//删除的做法public://表以i-1,j-1结尾要删的最小个数//初始化i<=n;//另一个为空串。则需要全删了j<=m;i<=n;i++) {j<=m;j++) {//相同就不用删。继承上一位的操作//不相等的话就删掉class Solution {//最长公共子序列做法public:i<=n;i++) {j<=m;j++) {//不是公共子序列的部分都删掉。原创 2025-03-11 23:52:32 · 258 阅读 · 0 评论 -
48.115.不同的子序列
public://母串以i-1结尾,子串以j-1结尾,的子序列最大个数i<n;//子串是空串。母串都是1j<m;//母串是空串,故无论多少都是0//从第一个开始比对i<=n;i++) {j<=m;j++) {//连续两个相同的话,可以用上一层循环的//沿用上一层循环的。原创 2025-03-11 15:19:44 · 262 阅读 · 0 评论 -
47.392.判断子序列
public://母串i-1,子串j-1位置的最大子序列长度int res=0;i<=n;i++) {//遍历母串tj<=m;j++) {//遍历子串s//继承母串的最大子序列长度。true:false;原创 2025-03-11 14:38:30 · 177 阅读 · 0 评论 -
46.53. 最大子序和
public://以i结尾的最大连续子数组和//依据就是表格。//再头脑中模拟一遍。i<n;i++) {//舍弃掉一些状态。每一层遍历都只留下最好的状态。return res;原创 2025-03-10 23:51:29 · 193 阅读 · 0 评论 -
45.1035.不相交的线
public://以i-1,j-1为结尾的最长公共子序列长度int res=0;i<=n;i++) {//遍历a数组j<=m;j++) {//遍历b数组return res;原创 2025-03-10 23:34:13 · 244 阅读 · 0 评论 -
44.1143.最长公共子序列
public://a以i-1结尾,b以j-1为结尾的最长公共子序列的长度int res=0;i<=n;i++) {j<=m;原创 2025-03-10 23:21:16 · 219 阅读 · 0 评论 -
43.718. 最长重复子数组
class Solution {//滚动数组版public:int res=0;i<=n;i++) {j>=1;j--) {//从后往前遍历,才能保证用上一层遍历的东西。//防止影响到下下层return res;public://表示到i-1,j-1为止的最长重复子数组。int res=0;//连续的,就理解为遍历两个一维的。for (i=1;i<=n;i++) {//遍历a数组for (j=1;j<=m;j++) {//遍历b数组//连续的。前一个一定在左上角。原创 2025-03-10 23:11:53 · 244 阅读 · 0 评论 -
42.674. 最长连续递增序列
/长度至少为1.初始化为1i<n;i++) {//留下每轮最长的,以供返回return res;原创 2025-03-10 14:29:11 · 187 阅读 · 0 评论 -
41.300.最长递增子序列
/到i位置的最长递增子序列长度为dp[i].全部初始化为1i<n;i++) {//逐个遍历序列j<i;j++) {//保留最长的那个。最后交出去return res;原创 2025-03-10 14:20:34 · 143 阅读 · 0 评论 -
39.714.买卖股票的最佳时机含手续费
public://0表不持有股票,1表持有股票//第一天持有股票的时候把手续费交了(统一再买入时交钱)i<n;i++) {//不持有股票:卖了股票赚钱//持有股票;买股票的时候把手续费交了。原创 2025-03-03 21:33:23 · 169 阅读 · 0 评论 -
37.309.最佳买卖股票时机含冷冻期
public://1表持有股票(可以卖了),2表不持有股票(刚卖不能买,进入了冷冻期)//0表不持有股票(可以买,过了冷冻期)i<n;i++) {//不持有股票:继续不持有,前一天卖了(只能在非冷冻期卖)//持有股票(前一天不是冷冻期):继续持有,昨天(不是冷冻期)买的//不持有股票(昨天卖了),只有一种可能,卖了之后进入了冷冻期//不持有。原创 2025-03-03 21:14:26 · 348 阅读 · 0 评论 -
36.188.买卖股票的最佳时机IV
j++) {if (j%2)//奇数是买入了。偶数是又卖出了相当于没操作i<n;j++) {if (j==1) {//第一次一定是这样.初始化只保证了第0天。所以这样//保证一定是第一次买入//奇数买入,减去//偶数卖出,加上//1是第一次买入,2是第一次卖出,3是第二次买入,4是第二次卖出...//类推得到奇数是买入,偶数是卖出。原创 2025-03-03 17:15:54 · 264 阅读 · 0 评论 -
34.122.买卖股票的最佳时机II
class Solution {//滚动数组版public://第i天有两个状态。0表示不持有股票。1表示持有股票dp[0][0]=0;//i%2随着i++是交替的。只有2*2的数组大小。第一列的前一天可能是第二列i<n;i++) {//不持有:继续不持有或者卖出了//卖了更赚就卖,不然就一直留着//持有:继续持有或者没有时再买入//亏的少再持有股票,不然就不持有。//最后一天保持和for循环的最后一次相一致public://第i天有两个状态。0表示不持有股票。原创 2025-03-02 20:08:55 · 202 阅读 · 0 评论 -
32.121. 买卖股票的最佳时机
public://第i天有两个状态。dp[i][0]表示不持有股票,dp[i][1]表示持有股票dp[0][0]=0;i<n;i++) {//天天相扣,递推//没有股票,不动,或者卖出了//保证了不会在亏钱的时候卖出。更赚钱就用之前没卖的状态去加//有股票,不动,或者买了//保证没有更低的入手时机。有更好的入手时机就入手//一定是不持有股票,股票换了钱一定更大。原创 2025-03-02 19:40:19 · 213 阅读 · 0 评论 -
31.337.打家劫舍 III
public://dp数组直接vector初始化列表硬造//左右中.因为要用到左右的返回值。//偷了root,就不偷左右//不偷root,左右都可偷可不偷//注意返回是{不偷,偷了}原创 2025-03-02 17:41:03 · 305 阅读 · 0 评论 -
30.213.打家劫舍II
public://已经确保了至少有一个能传进来。//长度。//长度为2的话,for循环会自己停下。i<=end;i++) {//初始化保证后面能用return res;原创 2025-03-02 17:07:57 · 208 阅读 · 0 评论 -
29.198.打家劫舍
public://感觉是线性dp//物品是房间i。重量是金额。求最大值//dp表从左往右偷能偷到的最大金额。i<n;i++) {//一家一家偷。偷到第i家为止。原创 2025-03-02 16:35:02 · 228 阅读 · 0 评论 -
27.多重背包理论基础
cin>>m>>n;i<n;i<n;i<n;//不用初始化i<n;i++) {//矿石一种一种放j>=w[i];j--) {//空间的限制.还是当01背包。每种考虑一次k++) {//数量的限制与空间的限制return 0;原创 2025-03-02 16:02:59 · 227 阅读 · 0 评论 -
26.139.单词拆分
public://把一个个单词看成一个个元素。方便查找dp[0]=true;//空字符串存在。这样后面遍历的条件才能成立//这个遍历字符串也是很暴力了i<=n;i++) {//一个个字母看成一个个空间j<i;j++) {//一个个单词看成一个个物品//substr(起始位置,截取的个数)=st.end() && dp[j]) {//如果有这个词并且前半部分也是个词的话dp[i]=true;//到目前为止都可以成立。原创 2025-03-02 01:16:50 · 163 阅读 · 0 评论 -
24.279.完全平方数
public://dp[j]表j为n的完全平方数的数量dp[0]=0;//虽然不会遍历到0,但是会用到dp[0]i<=100;i++) {//n的范围是100的平方j<=n;j++) {//如果还是最值,说明不会更优了。跳过//腾出空间用上这个数,就加一种方法。原创 2025-03-01 19:23:31 · 141 阅读 · 0 评论 -
23.322. 零钱兑换
public://dp[j]表和为j需要的最小硬币数dp[0]=0;//初值变成max了,所以要初始化i<n;i++) {//遍历每一样物品j<=amount;j++) {//不加这句的话回报错//腾出空间后,硬币数+1//如(3,2),要和为4的话,1永远不会出现,不会用到,永远是INT_MAX。原创 2025-03-01 19:04:05 · 160 阅读 · 0 评论 -
21.377. 组合总和 Ⅳ
public://请注意,顺序不同的序列被视作不同的组合。dp[0]=1;i<=tg;i++) {//和为tg.先遍历空间j<n;j++) {//一个一个放入背包遍历。再遍历物品。原创 2025-03-01 18:01:42 · 238 阅读 · 0 评论 -
19.518.零钱兑换II
/和为0就是不取硬币。有一种取法。i<n;i++) {//对n种硬币一种种遍历j<=amount;j++) {原创 2025-03-01 17:27:03 · 152 阅读 · 0 评论 -
18.完全背包理论基础
cin>>n>>m;i<n;i<n;i++) {//把一个个物品放入背包j<=m;j++) {//腾出空间看放不放的下return 0;原创 2025-03-01 16:51:12 · 340 阅读 · 0 评论 -
17.474.一和零
public://一个一个放入物品,遍历物品//有两个维度。0的数量和1的数量。在遍历时统计即可//对当前字符串而言:else n1++;i>=m1;i--) {//如果空间不够了,就不遍历了j>=n1;j--) {//遍历背包容量,从后往前遍历//腾出当前0子串1容量的空间,维护更新。原创 2025-03-01 16:20:29 · 261 阅读 · 0 评论 -
16.494.目标和
i<n;//x为正数和//必须是偶数//目标和超过最大和,也不可能//接下来就是装满容量为x的背包,//原本是全都要装,只是哪个正哪个负。现在转化为挑哪些为正即可。//只需要用到x//dp[j]表示和为j的话有dp[j]种方法。dp[0]=1;//和为0的话就不取数i<n;j--) {//环环相扣//从上一轮中再腾出nums[i]的空间来累加。原创 2025-03-01 15:32:29 · 1346 阅读 · 0 评论 -
14.1049.最后一块石头的重量II
i++) {//以一半为背包最大容量,看它装的满不。装的满最好,装不满也能求出最大//物品是石头,重量是石头重量,价值也是石头重量i++) {j--) {//分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。原创 2025-02-27 23:24:35 · 212 阅读 · 0 评论 -
13.416. 分割等和子集
i++) {//能分成两个相同的子集,一定是偶数//物品是数值,重量w是数值,价值v也是数值//滚动数组不用初始化i++) {j>=nums[i];j--) {原创 2025-02-27 22:50:35 · 269 阅读 · 0 评论 -
11+12.动态规划:01背包理论基础(滚动数组)
/滚动数组版int main()int n,m;cin>>n>>m;i<=n;i<=n;//滚动数组不用初始化//二维数组需要初始化,因为需要从上一层继承。那么第一层初始化才能让第二层去用j<=m;i<=n;//下标从1开始版int main()int n,m;cin>>n>>m;i<=n;i<=n;//老是忘记?大不了写完递推再回来初始化//初始化。从第一样东西开始,价值是第一样东西的价值。原创 2025-02-27 20:56:26 · 192 阅读 · 0 评论 -
9.96.不同的二叉搜索树
i<=n;i++) {j<=i;j++) {//轮流以j为子树节点(减掉了一个根节点),加在一起//左边的情况乘右边的情况。原创 2025-02-27 18:50:06 · 292 阅读 · 0 评论 -
8.343. 整数拆分
/因为必须拆分为至少两个正整数。1和0拆分不了//从3=2+1开始拆分。n范围也从2开始i<=n;i++) {//遍历之前的状态。从前往后遍历j<=i/2;j++) {//从1开始拆分,保留下大的。遍历一半即可.等于号表示可以均分}//里面的max:看拆分一次,还是两次以上大。外面的max:看之前的状态大,还是现在的状态大。原创 2025-02-27 18:24:07 · 298 阅读 · 0 评论 -
7.63. 不同路径 II
public://遇到障碍就停下//遇到障碍就停下i<m;i++) {j<n;j++) {原创 2025-02-27 12:56:37 · 197 阅读 · 0 评论 -
6.62.不同路径
public://dp[i][j]表示到(i,j)位置有几条路径//初始化:到边界都只有一条路径i<m;j<n;i<m;i++) {//从0开始的都初始化过了。接下来从1开始j<n;j++) {原创 2025-02-27 11:56:20 · 163 阅读 · 0 评论 -
4.746. 使用最小花费爬楼梯
class Solution {//优化版public://到台阶i需要支付的费用dp[0]=0;dp[1]=0;i<=n;public://到台阶i需要支付的费用dp[0]=0;dp[1]=0;i<=n;i++) {原创 2025-02-27 11:32:28 · 197 阅读 · 0 评论 -
3.70. 爬楼梯
public://定义dp的时候用到了n,n要是=0的话,下面初始化dp[2]就会出错//到i阶有dp[i]种方法dp[1]=1;dp[2]=2;i<=n;i++) {//从前两个状态推出第三个状态//第一个状态变成第二个状态dp[2]=sum;//第二个状态变成下一个状态正常版:public://定义dp的时候用到了n,n要是=0的话,下面初始化dp[2]就会出错//到i阶有dp[i]种方法dp[1]=1;dp[2]=2;i<=n;i++) {原创 2025-02-26 21:04:39 · 293 阅读 · 0 评论 -
2.509. 斐波那契数
class Solution {//dp版public://第i个的数值是dp[i]dp[0]=0;//初始化dp[1]=1;i<=n;原创 2025-02-26 20:36:35 · 155 阅读 · 0 评论
分享