LeetCode416:分割等和子集
题目描述: 方法1:把题目修改为0-1背包问题,nums[i] 为物品i的重量与价值,背包容量为nums元素之和的一半,如果装的最大价值为背包容量,则返回true class Solution { public: bool canPartition(vector<int>& nums) {
题目描述: 方法1:把题目修改为0-1背包问题,nums[i] 为物品i的重量与价值,背包容量为nums元素之和的一半,如果装的最大价值为背包容量,则返回true class Solution { public: bool canPartition(vector<int>& nums) {
链接:https://kamacoder.com/problempage.php?pid=1046 题目描述: 方法1:二维dp解决背包问题 #include<iostream> #include<vector> #include<cmath> using namespace std; int s
题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 例子:背包重量为4 方法1:二维dp 1:确定dp数组,dp[i][j] 表示从下标为[0-i]的物品里任意取,放
题目描述:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化,返回 你可以获得的最大乘积 。 方法1:动态规划,dp[i]表示第i个数可获得的最大乘积 class Solution { public: int integerBreak(int
题目描述: 方法1:动态规划,dp[i][j]表示到第 i-1 行第 j-1 列不同路径,dp[i][j] = dp[i-1][j] + dp[i][j-1];其中第一列和第一行固定只有一种路径,从第二行第二列开始遍历,保证可以填满dp数组 class Solution { public:
题目描述: 方法1:动态规划,分别求最大子数组和和最小子数组和,他们的绝对值中最大的一个即为题目要求 class Solution { public: int maxAbsoluteSum(vector<int>& nums) { int p = max(0,nums[0])
题目描述: 方法1:动态规划,题目类似于最大子数组和,本题中p表示以nums[i]结尾的最大开销的子数组,val哈希表存储每个字母的开销 m是最大开销的子数组 class Solution { public: int maximumCostSubstring(string s, string
题目描述:一条街道上共有 n * 2 个地块 ,街道的两侧各有 n 个地块。每一边的地块都按从 1 到 n 编号。每个地块上都可以放置一所房子。现要求街道同一侧不能存在两所房子相邻的情况,请你计算并返回放置房屋的方式数目。由于答案可能很大,需要对 109 + 7 取余后再返回。 方法1:动态规划dp
题目描述:给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 方
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 方法1:动态规划,第一圈和最后一圈不能同时偷,