![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包问题
sorry_maker
博客只图一乐,主要是给我自己看的,不要轻信,有问题欢迎留言
展开
-
leetcode 474 1和0
问题描述 思路分析 求最值问题,并且需要考虑所有的情况,所以可以用动态规划来写。题中是要选出最大的子集,首先,明确状态,dp[i][j][k]表示考虑第strs[0]到strs[i],0的个数为j,1的个数为k的最大子集。 对应每一个字符串,就有选还是不选的问题。所以状态方程是 dp[i][j][k]=max(dp[i-1][j][k](不选),dp[i-1][j-num0][k-num1]+1(选)); 然后还有一个步骤就是初始化的问题,那就是考虑第一个字符串对应的dp数组应该如何写,具体见代码 代码原创 2020-10-20 16:36:30 · 83 阅读 · 0 评论 -
LeetCode 动态规划322零钱兑换
问题描述 思路 根据题意,最暴力的方法就是枚举所有的情况,并且是求最值问题,所以就可以想到用动态规划的方法进行求解 代码 class Solution { public: int coinChange(vector<int>& coins, int amount) { int n=coins.size(); if(amount==0) return 0; if(n==1&&amount%coins[0]!=0)原创 2020-10-20 14:28:00 · 93 阅读 · 0 评论 -
leetcode 416.分割等和子集
问题描述 思路 本题可以看做能否将n个物体放入容量恰好为sum/2的背包中,是一个典型的背包问题 状态转移方程为 如果当前物体(第i个)可以放得下,也就是if(sums[i]<=c) dp[i][c]=(dp[i-1][c]||dp[i-1][c-sums[i]]); 即考虑0到i个物品能不能恰好放入容量为c的背包,就要考虑第i个物品放还是不放,如果放,那就是考虑0到i-1个物品能不能恰好放入容量为c-sums[i]的背包,,如果不放,就考虑能否将0到i-1个物品能不能恰好放入容量为c的背包。 如果原创 2020-10-16 11:07:01 · 60 阅读 · 0 评论