首页 > 编程语言 >day50 动态规划part7 代码随想录算法训练营 279. 完全平方数

day50 动态规划part7 代码随想录算法训练营 279. 完全平方数

时间:2024-02-29 12:45:59浏览次数:22  
标签:平方 min int 随想录 E5% part7 day50 279 dp

题目:279. 完全平方数

我的感悟:

  • 看文字也行

理解难点:

  • 物品是什么?是i*i<n的集合

听课笔记:

代码示例:

class Solution:
    def numSquares(self, n: int) -> int:
        # 完全背包问题
        # 顺序没关系,组合把
        # 递推公式难想,dp[j] = min(dp[j],dp[j-i*i]+1)
        # 物品是什么? 有限值 i*i <n
        # 背包n
        # dp[j] 含义是到整数j,包含完全平方的最小数量
        dp = [float('inf')] * (n+1)
        dp[0] = 0
        for i in range(1,int(n**0.5)+1):    # 遍历物品
            for j in range(n+1):    # 这里前边界写不对也没关系  # 写成这样是最对的 range(i * i, n + 1)
                if j-i*i >=0:   # 补充
                    dp[j] = min(dp[j],dp[j-i*i]+1)
        # print(dp)
        return dp[n]

通过截图:

边界写对的写法:

class Solution:
    def numSquares(self, n: int) -> int:
        dp = [float('inf')] * (n + 1)
        dp[0] = 0

        for i in range(1, int(n ** 0.5) + 1):  # 遍历物品
            for j in range(i * i, n + 1):  # 遍历背包
                # 更新凑成数字 j 所需的最少完全平方数数量 # 减少了判断
                dp[j] = min(dp[j - i * i] + 1, dp[j])

        return dp[n]

资料:

279.完全平方数  

本题 和 322. 零钱兑换 基本是一样的,大家先自己尝试做一做 

视频讲解:https://www.bilibili.com/video/BV12P411T7Br

https://programmercarl.com/0279.%E5%AE%8C%E5%85%A8%E5%B9%B3%E6%96%B9%E6%95%B0.html

标签:平方,min,int,随想录,E5%,part7,day50,279,dp
From: https://www.cnblogs.com/liqi175/p/18043321

相关文章

  • day50 动态规划part7 代码随想录算法训练营 322. 零钱兑换【什么时候+1】
    题目:322.零钱兑换我的感悟:看着文字版也能做出来了,哈哈哈!!理解难点:这题是最小值dp[j]=min(dp[j],dp[j-coins[i]+1)因为是数量要加一个1,有的加,有的不加,还没太搞清楚。 听课笔记: 代码示例:classSolution:defcoinChange(self,coins:List[int],amount:int......
  • 今日补充练习-动态规划算法part7-卡尔57爬楼梯进阶
    注意点&感悟:多练习注意体会跟昨天的组合问题的区别。注意物品的边界题目链接:卡尔57爬楼梯进阶自己独立写的代码:#完全背包问题--下的求种类问题#物品是m,有限的#背包是ntotal,m=map(int,input().split())dp=[0]*(total+1)dp[0]=1forjinrange(total+1):......
  • day44 动态规划part7 代码随想录算法训练营 70. 爬楼梯 (进阶)
    题目:爬楼梯(进阶)-在卡尔网我的感悟:昨天最后没怎么听懂的,今日回旋镖来了。理解难点:递推公式,和遍历顺序手写笔记:代码示例:total,m=map(int,input().split())#每次爬m个#dp[i]含义是爬到i有dp[i]种方法#是完全背包问题dp=[0]*(total+1)dp[0]=1fo......
  • 代码随想录算法训练营第六天|242. 有效的字母异位词
    这个题目还是比较简单的,知道是查表的思路之后,很快就写出来了:classSolution:defisAnagram(self,s:str,t:str)->bool:iflen(s)!=len(t):returnFalsealphabet=[]dict_s={}dict_t={}foriinran......
  • 代码随想录算法训练营day08 | leetcode 344. 反转字符串、541. 反转字符串 II、54. 替
    目录题目链接:344.反转字符串-简单题目链接:541.反转字符串II-简单题目链接:[54.替换数字](题目页面(kamacoder.com))题目链接:151.反转字符串中的单词-中等题目链接:[55.右旋字符串](题目页面(kamacoder.com))题目链接:344.反转字符串-简单题目描述:编写一个函数,其作用是将......
  • 代码随想录 day64 柱状图中最大的矩形
    柱状图中最大的矩形本题和接雨水在很多地方都很相似但是不是求凹槽了而是求突起就是相同的思路求不同的柱体对于每一个柱体找左边最矮的柱体这个柱体的右边的柱体和这个柱体围成的矩形就为最大同理找右边的柱体这里注意要用while而不是if因为要找到最矮的而......
  • day44 动态规划part6 代码随想录算法训练营 518. 零钱兑换 II
    题目:518.零钱兑换II我的感悟:递推公式,我没写错。是初始化写错了。这种求多少种的,要考虑1种,是空集合选1中。而那些考虑能背最大的价值,要从0初始化,0的含义值无价值。 理解难点:递推公式,是累加dp[j]+=dp[j-conins[i]]初始化的含义 dp[0]=1听课笔记: 代码示例:cl......
  • day44 动态规划part6 代码随想录算法训练营 卡尔网52题
    题目:52.携带研究材料我的感悟:背模板,记下来,就好了。理解难点:听课笔记:代码示例:n,v=map(int,input().split())weight_list=[]value_list=[]for_inrange(n):weight,value=map(int,input().split())weight_list.append(weight)value_list.a......
  • day44 动态规划part6 代码随想录算法训练营 完全背包理论
    题目:完全背包理论我的感悟:记忆中理解。理解难点:为什么正序就是用多次?因为正序是借用本层左侧的状态,倒序是借用上一层的状态。演示:打印DP:示例代码:查看代码#01背包deftest_CompletePack1(weight,value,bagWeight):dp=[0]*(bagWeight+1)f......
  • day43 动态规划part5 代码随想录算法训练营 474. 一和零 【粗略理解】
    题目:474.一和零我的感悟:有点难想,加油、111本题没敲,有机会敲一遍理解难点:两个维度的背包听课笔记:代码示例:classSolution:deffindMaxForm(self,strs:List[str],m:int,n:int)->int:dp=[[0]*(n+1)for_inrange(m+1)]#创建二维动......