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;
}
};

最新文章

  1. PHP的两种表单数据提交方式
  2. mac下webpagetest搭建
  3. 泛函编程(26)-泛函数据类型-Monad-Applicative Functor Traversal
  4. discuz 二次开发
  5. 斯坦福第十课:应用机器学习的建议(Advice for Applying Machine Learning)
  6. Android开发中Ant命令编译和APK签名的一些心得
  7. 某项目 需要在UITabbar 上显示小红点,在此搜罗了三个方法。
  8. 面向连接的socket数据处理过程以及非阻塞connect问题
  9. hdu--1258--Sum It Up(Map水过)
  10. 11 Linear Models for Classification
  11. 【QAQ的Minecraft】
  12. 干掉windows无脑设定:“始终使用选择的程序打开这种文件”、“使用Web服务查找正确的程序”
  13. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习6
  14. &lt;转&gt;jmeter(八)断言
  15. 检测浏览器(BOM)以及地址栏网址的API
  16. 【特征提取】MultiBlock-LBP特征
  17. delphi socket 编程 使用多线程
  18. 微信小程序 功能函数 客服
  19. using关键字
  20. HDU 1561 The more, The Better (有依赖背包 || 树形DP)

热门文章

  1. sql之临时表
  2. STL中的vector实现邻接表
  3. .NET 5 - 下一代.NET
  4. C++ STL map使用
  5. 535. Encode and Decode TinyURL(rand and srand)
  6. CodeForces717C 【数学】
  7. TopCoder 14084 BearPermutations2【笛卡尔树+dp】
  8. PHP实现用户登录注册功能
  9. java泛型笔记一
  10. PostgreSQL - N&#39;&#39;和::bpchar