【算法日志】动态规划刷题:完全背包应用问题(day39)

代码随想录刷题60Day


目录

前言

零钱兑换

完全平方数


前言

今天重点是对完全背包问题进一步了解,难度不大,重点是区分与其他背包问题在初始和遍历上的一些细节。


零钱兑换

cpp 复制代码
int coinChange(vector<int>& coins, int amount) 
	{
		if (!amount)return 0;
		const int size = coins.size();
		vector<int> dp(amount + 1, 0);
		sort(coins.begin(), coins.end());
		if (amount < coins[0])return -1;
		for (int i = 1; i <= amount; ++i)
		{
			for (int j = size - 1; j >= 0; --j)
			{
				if (i >= coins[j] && (!(i - coins[j]) || dp[i - coins[j]]))
				{
					if (dp[i])
						dp[i] = min(dp[i], dp[i - coins[j]] + 1);
					else
						dp[i] = dp[i - coins[j]] + 1;
				} 
			}
		}
		if (dp[amount])return dp[amount];
		return -1;
	}

完全平方数

cpp 复制代码
	int numSquares(int n) 
	{
		vector<int> dp(n + 1, 0);
		for (int i = 1; i <= n; ++i)
		{
			for (int j = 1; j * j <= i; j++)
			{
				if (dp[i])
					dp[i] = min(dp[i], dp[i - j * j] + 1);
				else
					dp[i] = dp[i - j * j] + 1;
			}
		}
		return dp[n];
	}
相关推荐
罗湖老棍子2 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
飘尘5 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
夏幻灵5 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展
CarIise6 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
无忧.芙桃6 小时前
C++ 并查集详解:原理、实现与应用
c语言·c++·算法·leetcode
蛋蛋的就会顺顺的6 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
Code_Solitude7 小时前
c语言:二分法的完整补充
c语言·开发语言·算法
一切皆是因缘际会7 小时前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai
动词ing9 小时前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法
Nil2089 小时前
leetcode 55跳跃游戏
算法·leetcode·游戏