题解 | #分割等和子集#

分割等和子集

https://www.nowcoder.com/practice/65ade309fa4d4067a9add749721bfdc0

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    scanf("%d", &n);
    int total = 0;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        total += a[i];
    }
    if (total % 2 != 0) {
        puts("false");
        return 0;
    }
    int mx = (1 << 31) - 2;
    total /= 2;
    vector<int> dp(total, mx);
    dp[0] = 0;
    for (int i = 0; i < n; i++) {
        for (int j = total; j >= a[i]; j--) {
            dp[j] = min(dp[j - a[i]] + 1, dp[j]);
        }
    }
    if (dp[total] == mx) {
        puts("false");
    } else puts("true");
    return 0;
}

算法常用解题技巧 文章被收录于专栏

算法常用解题技巧

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务