题解 | #农场的奶牛分组# 01背包

农场的奶牛分组

https://www.nowcoder.com/practice/bdb90a97a15d42f989e406080d88bed9

知识点

背包问题 DP

思路

首先先对所有的数求和,如果是奇数则不可拆分。

之后需要凑出sum/2的总和,问题转化成有n个数可以选一次或者不选,求出是否能凑出sum/2,则可以用01背包解决。

实现上可以 一维空间优化。

时间复杂度 O(n*sum)

AC Code(C++)

#include <numeric>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weights int整型vector 
     * @return bool布尔型
     */
    bool canPartition(vector<int>& weights) {
        int sum = accumulate(weights.begin(), weights.end(), 0);
        if (sum & 1) return false;
        sum >>= 1;
        vector<bool> f(sum + 1, false);
        f[0] = true;
        for (auto x : weights) {
            for (int j = sum; j >= x; j --) {
                f[j] = (f[j] || f[j - x]);
            }
        }
        return f[sum];
    }
};

全部评论

相关推荐

鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
点赞 评论 收藏
分享
程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务