状态:dp数组表示,不超过平均值的重量下,每个重量对应的最大价值的东西,在这里价值同样是重量 状态转移: dp[j]=max(dp[j],d[j−stones[i]]+stones[i]) 总的重量 - 2×接近平均值重量,就是最小差值 3 python实现 class Solution: def lastStoneWeightII(self, stones: List[int]) ->int: s =sum(...
class Solution { public: int lastStoneWeightII(vector<int>& stones) { //30*100=3000,target最大1500 vector<int>dp(1500+1); dp[0]=0; int sum=0; for(int i=0;i<stones.size();i++){ sum+=stones[i]; } int target=sum/2; for(int i=0;i<stones.size();i++){//遍历物品 for...
1049. 最后一块石头的重量 II 题目链接:https://leetcode-cn.com/problems/last-stone-weight-ii/ 题目难度:中等 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果x == y,那么两块...
class Solution{public:int lastStoneWeightII(vector<int>& stones){int sum=0;for(auto x:stones)sum+=x;int n=stones.size();int m=sum/2;//创建dp表vector<vector<int>> dp(n+1,vector<int>(m+1));//填表for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dp[i][j]=dp[i-1][...
题目链接:1049.最后一块石头的重量II 1/**2本题的目的是尽量让石头分成重量相同的两堆,这样相减之后剩下的石头最小,这样就化解成01背包问题了3*/4classSolution {5publicintlastStoneWeightII(int[] stones) {6intsum = 0;7for(intstone : stones){8sum +=stone;9}10inttarget = sum / 2;11//dp[...
LeetCode 1049. Last Stone Weight II (最后一块石头的重量 II) 题目 链接 https://leetcode.cn/problems/last-stone-weight-ii/ 问题描述 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 ...
int lastStoneWeightII(vector<int>& stones) { int sum = 0; for(int i = 0; i < stones.size(); i++) sum += stones[i]; // 先求出石块的总重量 int x = sum / 2; // 再努力去把石块分为近似的两份(两份重量的差距不确定,但因为整数相除结果是向下取整,所以x份的重量一定小于等于另一...
class Solution{public:intlastStoneWeightII(vector<int>&stones){if(stones.empty())return0;if(stones.size()==1)returnstones.back();intsum=0;for(auto&iter:stones)sum+=iter;inthalf=sum/2+sum%2;vector<int>dp(half+1,0);for(inti=0;i<stones.size();i++){for(intj=half;j>=stones[i]...
1049 Last Stone Weight II 最后一块石头的重量 II Description: You are given an array of integers stones where stones[i] is the weight of the ith stone. We are playing a game with the stones. On each turn, we choose any two stones and smash them together. Suppose the stones have weigh...
int lastStoneWeightII(vector<int>& stones) { if(stones.size() == 1){ return stones[0]; } int n = stones.size(); int sum = accumulate(stones.begin(), stones.end(), 0); int content = sum / 2; vector<vector<int>> dp(n, vector<int>(content + 1, 0)); // 由于j是容量,...