【最后一块石头的重量 II】python刷题记录

R4-dp

铁血回归

目标和一样 

问题:

n个数,每个数都可以+或者-

求最小的非负数和

class Solution:
    def lastStoneWeightII(self, stones: List[int]) -> int:
        #先计算石头的总重量
        total=sum(stones)
        #负数下标右移,整体右移total
        dp=[False]*(2*total+1)
        #相当于原来0的位置
        dp[total]=True
        for i,x in enumerate(stones):
            new=[False]*(2*total+1)
            for j in range(2*total+1):
                # 如果之前一轮某个值可以取到
                # 那么本轮 该值 -x +x 的值也可以取到
                if dp[j]:
                    if j-x>=0:
                        new[j-x]=True
                    if j+x<=2*total:
                        new[j+x]=True
            dp=new
        for i in range(total,2*total+1):
            #返回第一个>=0的位置。减去偏移量
            if dp[i]:
                return i-total
        return -1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值