描述:
回收废品,每次选两个来切碎,分别是m和n且m<=n, 当m==n时 ,两个都切碎(即数组直接少了m和n),如果m<n,则m切碎,n=n-m ,切到最后 剩余一个废品则返回废品大小,若剩0个则返回0
这题就是力扣的最后一块石头的重量
示例:
输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值
代码:
class Solution {
public int lastStoneWeightII(int[] stones) {
int len=stones.length;
int sum=0;
for(int i=0;i<len;i++){
sum+=stones[i];
}
int targer=sum/2;
//dp[i]:容量为i时,放入物品的最大价值
int[] dp=new int[targer+1];
for(int i=0;i<len;i++){
for(int j=targer;j>=stones[i];j–){
dp[j]=Math.max(dp[j],dp[j-stones[i]]+stones[i]);
}
}
return sum-dp[targer]-dp[targer];
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116063.html