首页 > 编程语言 >代码随想录算法训练营第三十三天| 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

代码随想录算法训练营第三十三天| 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

时间:2023-07-19 10:34:30浏览次数:30  
标签:stones return int 1049 随想录 石头 II sum dp

1049. 最后一块石头的重量 II

思路:

因为含有两个石头的相撞,所以需要把dp的目标值改成sum/2,

然后取得这个目标值的最大值,然后对sum-2*target

代码:

 1 // 要求:有多个石头,两两撞击,取得剩下的石头的最小值
 2 // ——》一定要碰到最后一个
 3 // 注意:
 4 // 1,x==y: 两个粉碎,x<y: y = y-x
 5 // 2,可能剩下一个或者0个 那么怎么判断是0还是1?
 6 // 
 7 // 背包问题:
 8 // dp[n]:当有N个物品的时候,当前重量的最小值
 9 // 
10 // 
11 //  怎么设置? 已经直到重量是这些,但是终止条件是什么?
12 // 
13 // 物品:石头  价值:大小,重量 个数
14 // 容量:物品的数量
15 // 
16 // dp[n]: 撞的话需要取两个石头,但是当前遍历的只有一个石头
17 // 1,不撞 dp[n]
18 // 2,撞: dp[n] = dp[n+1] - (2x)[第一个是遍历y,使得x属于<=y]
19 //
20 
21 //
22 // 如果涉及两个东西之间的比较,可以往容量为sum/2那里思考
23 // dp[n]: 当容量为N  时候的最大值
24 //
25 int lastStoneWeightII(vector<int>& stones) {
26     if (stones.size() == 1) return stones[0];
27 
28     int sum_ = 0;
29     for (int num : stones)
30     {
31         sum_ += num;
32     }
33 
34     vector<int> dp((sum_ / 2)+1, 0);
35 
36     for (int i = 0; i < stones.size(); i++)
37     {
38         for (int j = (sum_ / 2); j >= stones[i]; j--)
39         {
40             dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
41         }
42     }
43 
44     int result = sum_ - 2 * dp[sum_ / 2];
45     if (result < 0) return 0;
46     else return result;
47 }

 

标签:stones,return,int,1049,随想录,石头,II,sum,dp
From: https://www.cnblogs.com/smartisn/p/17564878.html

相关文章

  • 【嵌入式面经专题】4-IIC协议
    1.概述I2C(Inter-IntegratedCircuitBUS)集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。2.物理层只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是......
  • 代码随想录算法训练营第57天 | ● 647. 回文子串 ● 516.最长回文子序列 ● 动
     第九章 动态规划part17●  647. 回文子串  ●  516.最长回文子序列●  动态规划总结篇 今天 我们就要结束动态规划章节了,大家激不激动!!!   详细布置   647. 回文子串    动态规划解决的经典题目,如果没接触过的话,别硬想 直接看题解。https:......
  • 代码随想录算法训练营第58天 | ● 739. 每日温度 ● 496.下一个更大元素 I - 第1
     第十章 单调栈part01 ●  739. 每日温度 ●  496.下一个更大元素 I    详细布置    739. 每日温度  今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。 大家可以读题,思考暴力的解法,然后在看单调栈的解法。 就能感受出单调栈的巧妙 ......
  • 代码随想录算法训练营第59天 | ● 503.下一个更大元素II ● 42. 接雨水 - 第10章
     第十章 单调栈part02 ●  503.下一个更大元素II ●  42. 接雨水    详细布置   503.下一个更大元素II  这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做 https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%......
  • 代码随想录算法训练营第60天 | ● 84.柱状图中最大的矩形 - 第10章 动态规划part03
     第十章 单调栈part03有了之前单调栈的铺垫,这道题目就不难了。  ●  84.柱状图中最大的矩形   今天是训练营最后一天,恭喜坚持两个月的录友们,接下来可以写一篇自己 代码随想录一刷的总结。好好回顾一下,这两个月自己的博客内容,以及自己的收获。  ......
  • 剑指 Offer 58 - II. 左旋转字符串
    classSolution{public:stringreverseLeftWords(strings,intn){reverse(s.begin(),s.begin()+n);#反转用reverse而不是s.reversereverse(s.begin()+n,s.end());#这里用s.begin()+n而不是s.begin()+n+1,因为s.begin()是指向集......
  • CF1769C2 Подкрутка II 题解
    看到同机房的好哥们发了贪心做法的题解,心血来潮就A了这道题写了真·dp的题解。虽然方法比老师上课讲的麻烦的多,并不是最优解,但至少是我自己思考得出的结果。题目要求输入一个原序列\(a_i\),从\(a_i\)中求得某个区间\([l,r]\)。此区间经过题面中所描述的修改操作(任何元素\(......
  • 代码随想录算法训练营第三十三天| 01背包问题 二维 01背包问题 一维 416. 分割等和
    01背包问题二维 要求:有一个背包,他只能装4KG,分别有三个物品:115;320;430——》需要物品价值最大 dp[i][j]含义:在放物品I的时候在J背包容量下的物品最大值递推公式: 1,不放当前物品:dp[i-1][j]2,放当前物品:(dp[i-1][j])->不应该是在当前容量下,i-1的最大价值,应该是:dp[i-......
  • 685. 冗余连接 II
    在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。输入一个有向图,该图由一个有着n个节点(节点值不重复,从1到n)的树及一条附加的有向边构成。附加的边包......
  • iis7中session丢失的解决方法小结
    WindowsServer2008+IIS+ASP.net+SQLServer2008搭建的内部WEB系统。 用户Session总是丢失,可能是IIS的不稳定性将导致Session频繁丢失。 用的是Session=SQLSEVER,即把Session保存到数据库。 解决方法: 1,在命令行进入如下地址(InstallSqlState.sql文件目录) cd"C:\WINDOWS\Mic......