leetcode_1049. Last Stone Weight II_[DP]
2024-08-28 07:30:36
1049. Last Stone Weight II
https://leetcode.com/problems/last-stone-weight-ii/
题意:从一堆石头里任选两个石头s1,s2,若s1==s2,则两个石头都被销毁,否则加入s1<s2,剩下一块重量为s2-s1的石头。重复上面的操作,直至只剩一块石头,或没有石头。问最后剩下的石头的重量最小为多少(0表示没有剩余石头)。
解法:
每次选两块石头进行相减问最后一块石头重量最小为多少,可以看作是将所有石头分为两波,使两波石头的差值的绝对值最小。
使用背包(snapsack)解决。dp[i]表示stones是否能组成重量为i的group。
class Solution
{
public:
int lastStoneWeightII(vector<int>& stones)
{
int sum = accumulate(stones.begin(),stones.end(),);
vector<bool> dp(sum/,);
dp[]=;
for(int s:stones)
for(int j=sum/;j>=s;j--)
dp[j] = dp[j]|dp[j-s];
int res = sum;
for(int i=;i<=sum/;i++)
res = min(res, sum-dp[i]*i*);
return res;
}
};
最新文章
- PHP的两种表单数据提交方式
- mac下webpagetest搭建
- 泛函编程(26)-泛函数据类型-Monad-Applicative Functor Traversal
- discuz 二次开发
- 斯坦福第十课:应用机器学习的建议(Advice for Applying Machine Learning)
- Android开发中Ant命令编译和APK签名的一些心得
- 某项目 需要在UITabbar 上显示小红点,在此搜罗了三个方法。
- 面向连接的socket数据处理过程以及非阻塞connect问题
- hdu--1258--Sum It Up(Map水过)
- 11 Linear Models for Classification
- 【QAQ的Minecraft】
- 干掉windows无脑设定:“始终使用选择的程序打开这种文件”、“使用Web服务查找正确的程序”
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习6
- <;转>;jmeter(八)断言
- 检测浏览器(BOM)以及地址栏网址的API
- 【特征提取】MultiBlock-LBP特征
- delphi socket 编程 使用多线程
- 微信小程序 功能函数 客服
- using关键字
- HDU 1561 The more, The Better (有依赖背包 || 树形DP)