鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 358

[复制链接]
发表于 2020-3-25 17:40:45 | 显示全部楼层

一般的吧,我还有见过200
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 17:42:07 | 显示全部楼层
xiaomei47580 发表于 2020-3-24 13:23
看到50鱼币我滚了进来。。。看大佬答题

哈哈 哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-25 17:43:33 | 显示全部楼层

解答错误

输入:
nums = [0, 0, 0, 0, 0, 0, 0, 0, 1], s = 1
输出:8
预期结果:256
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-25 17:45:22 | 显示全部楼层
sjtuszy 发表于 2020-3-23 22:20
献丑一个简单的玩赖思路:

解答错误

输入:
nums = [0, 0, 0, 0, 0, 0, 0, 0, 1], s = 1
输出:268
预期结果:256
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 18:14:22 | 显示全部楼层
@zltzlt 12楼已改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 19:35:14 | 显示全部楼层
小马爱python 发表于 2020-3-25 16:59
大神太强了可以麻烦解析一下这个算法吗

一同学习,我也是初学者,只是做的题比较多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 20:14:57 | 显示全部楼层
写C不香吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 21:13:52 | 显示全部楼层
本帖最后由 TJBEST 于 2020-3-25 21:52 编辑
zltzlt 发表于 2020-3-25 17:35
输入 nums = [31, 4, 45, 3, 44, 49, 28, 6, 22, 24, 40, 25, 13, 46, 17, 10, 2, 38, 25, 15], s = 25  ...


楼主 我又写了一个,应该可以了,不是递归
def fun358(nums,s):
    M = len(nums)
    dic = dict()
    if nums[0] == 0:
        dic[0] = 2
    else:
        temp = nums[0]
        dic[temp] = 1
        dic[-temp] = 1
    for each in range(1,M):
        dic_temp = dict()
        temp = nums[each]
        for eachEle in dic:
            if nums[each] == 0:
                try:
                    dic_temp[eachEle] = dic_temp[eachEle] + 2 * dic[eachEle]
                except Exception:
                    dic_temp[eachEle] = 2 * dic[eachEle]
            else:
                try:
                    dic_temp[eachEle + temp] = dic_temp[eachEle + temp] + dic[eachEle]
                except Exception:
                    dic_temp[eachEle + temp] = dic[eachEle]
                try:
                    dic_temp[eachEle - temp] = dic_temp[eachEle - temp] + dic[eachEle]
                except Exception:
                    dic_temp[eachEle - temp] = dic[eachEle]
        dic = dic_temp
    return dic[s]

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 22:54:48 | 显示全部楼层
楼主,能不能测试一下16楼,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 08:36:45 | 显示全部楼层
直接用背包试试。
def T358(nums, s):
    if sum(nums)<s or (s+sum(nums))%2: # 不可能成功,剪枝
        return 0
    n=int((s+sum(nums))/2)
    dp=[1]+[0]*n
    # 似乎是动态规划?背包?
    for i in nums:
        for j in range(n, i-1, -1): # 动态规划
            dp[j]=dp[j]+dp[j-i]

    return dp[n]

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-26 08:42:20 | 显示全部楼层
我恨不得用C或C++,都用惯了C++,转成Python费了点功夫
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 13:19:30 | 显示全部楼层
ouyunfu 发表于 2020-3-23 21:02
挑战一行代码
如果是python3.8版本,可以使用海象运算符“:=”,减少一次len函数的调用,代码如下:

第二段代码有语法错误哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 13:31:33 | 显示全部楼层
阴阳神万物主 发表于 2020-3-24 04:14
难度评级:中等
要素分析:算法 效率
感受:问题可以转化为对所有数字的符号做规划的二进制问题。

输入 nums = [42, 24, 30, 14, 38, 27, 12, 29, 43, 42, 5, 18, 0, 1, 12, 44, 45, 50, 21, 47], s = 38 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 13:32:24 | 显示全部楼层
阴阳神万物主 发表于 2020-3-24 04:48
这个的时间复杂度(算上定义的二进制数据自增函数)应当是 (2**n)*n

输入 nums = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], s = 1 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 13:32:47 | 显示全部楼层
蒋博文 发表于 2020-3-24 09:24
本帖最后由 蒋博文 于 2020-3-24 09:58 编辑

84 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 17:16:55 | 显示全部楼层

输入 nums = [1], s = 1 出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 17:18:09 | 显示全部楼层
mdphd 发表于 2020-3-24 09:45
暴力破解
尝试优化算法遇阻,只能暴力

输入 nums = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], s = 0 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 17:18:58 | 显示全部楼层
l0stparadise 发表于 2020-3-24 14:01
动态规划学习中,感觉好难

解答错误

输入:nums = [0, 0, 0, 0, 0, 0, 0, 0, 1], s = 1
输出:1
预期结果:256
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 17:20:22 | 显示全部楼层

解答错误

输入:nums = [1, 0], s =  1
输出:1
预期结果:2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 17:21:44 | 显示全部楼层

输入以下数据超时:
nums = [0, 0, 0, 0, 0, 0, 0, 0, 1]
s = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表