2024.8.23 刷题总结

2024.8.23

**每日一题**

198.打家劫舍,这道题是一道简单的入门动态规划问题,根据题目意思,我们不能取数组中相邻的元素然后还必须满足总结果最大,所以我们可以维护一个数组,用来保存在数组每个位置之前能取到的最大值,然后最后输出第n-1个元素的值即为答案。

转移公式如下:

dp[i]=max(dp[i-2]+nums[i],dp[i-1]);

cpp 复制代码
class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if(n==1) return nums[0];
        vector<int> dp(n,0);
        dp[0]=nums[0];
        dp[1]=max(nums[0],nums[1]);
        for(int i = 2;i<n;i++){
            dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
        }
        return dp[n-1];

    }
};

279.完全平方数,这道题考察的是动态规划的知识,依题意得,我们需要找到最少的平方数之和使得等于要求的数,我们首先会想到用离该数最近的完全平方数来考虑,但是这样不方便枚举和遍历,所以我们采用动态规划的一般方法,先处理前面的数,再遍历到后面的数。本题需要维护一个到当前位置需要最少完全平方数的数组,然后开始从1遍历到n,这期间需要枚举所有小于i的完全平方数用来找到最小的答案,每次循环起点将dp[i]设置为i,因为这是最多的情况,然后依次比较取最小值,转移方程如下:

dp[i]=min(dp[i],dp[i-j*j]+1);

cpp 复制代码
class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n+1,0);
        dp[0]=0;
        dp[1]=1;
        for(int i = 2;i<=n;i++){
            dp[i]=i;
           for(int j =1;j*j<=i;j++){
              dp[i]=min(dp[i],dp[i-j*j]+1);
              }
           }
        return dp[n];  
    }
};

322.零钱兑换,这道题是考察动态规划的知识,本题也是仿照一般的动态规划的状态转移的思想来完成。首先我们需要维护一个数组表示达到每个金额需要的最少硬币数目,然后遍历求值,第一个状态为金额,从1遍历到n,第二个状态是用的硬币种类,从0遍历到数组末尾,如果当前金额一直低于硬币面额就继续,否则就更新当前所需数目最小值,最后输出所需金额的数目:

dp[i]=min(dp[i],dp[i-coins[j]]+1);

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount+1,amount+1);
        dp[0]=0;
        int n = coins.size();
        for(int i = 0;i<=amount;i++){
            for(int j = 0;j<n;j++){
                if(i-coins[j]<0) continue;
                dp[i]=min(dp[i],dp[i-coins[j]]+1);
            }
        }
        return (dp[amount]==amount+1) ? -1 : dp[amount]; 

    }
};
相关推荐
xsyaaaan4 小时前
代码随想录Day30动态规划:背包问题二维_背包问题一维_416分割等和子集
算法·动态规划
我是咸鱼不闲呀7 小时前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
xhbaitxl10 小时前
算法学习day39-动态规划
学习·算法·动态规划
xhbaitxl13 小时前
算法学习day38-动态规划
学习·算法·动态规划
2501_924878731 天前
数据智能驱动进化:AdAgent 多触点归因与自我学习机制详解
人工智能·逻辑回归·动态规划
YYuCChi2 天前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
罗湖老棍子2 天前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划
一只小小的芙厨2 天前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
金融RPA机器人丨实在智能2 天前
2026动态规划新风向:实在智能Agent如何以自适应逻辑重构企业效率?
算法·ai·重构·动态规划
问好眼2 天前
【信息学奥赛一本通】1275:【例9.19】乘积最大
c++·算法·动态规划·信息学奥赛