题解 | 数组分组 使用set动态规划

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

#include <algorithm>
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, sum = 0, sum3 = 0, sum5 = 0, sume = 0, sum_aim = 0, t;
    vector<int> ve;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> t;
        sum += t;
        if (t % 5 == 0) {
            sum5 += t;
        } else {
            if (t % 3 == 0) {
                sum3 += t;
            } else if (t != 0)
                ve.emplace_back(t);
        }
    }
    sume = sum - sum3 - sum5;
    if (sum % 2 != 0) {
        cout << "false";
        return 0;
    }
    sum_aim = sum / 2 - min(sum3, sum5);

    if (ve.empty()) {
        if (sum3 == sum5)
            cout << "true";
        else
            cout << "false";
        return 0;
    }
    sort(ve.begin(), ve.end());
    unordered_set<int> dp, dp_last;
    dp.insert(0);
    dp_last = dp;
    for (int i = 0; i < ve.size(); ++i) {
        for (auto& val : dp_last) {
            dp.insert(val + ve[i]);
            if (dp.find(sum_aim) != dp.end()) {
                cout << "true";
                return 0;
            }
        }
        dp_last = dp;
    }

    cout << "false";
    return 0;
}

全部评论

相关推荐

头像
03-25 16:22
南华大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务