51Nod-1007-正整数分组

ACM模版

描述

题解

被包装后的01背包。所有整数和最大为10000,所以只要求在sum/2的背包中,最大的价值,然后fabs(sum - dp[N][C] - dp[N][C])即为结果。

代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>

using namespace std;

const int MAXN = 110;
const int MAXM = 5e3 + 10;

int A[MAXN];
int dp[MAXM][MAXM];

int main(int argc, const char * argv[])
{
// freopen("input.txt", "r", stdin);

    int N;
    cin >> N;

    int sum = 0;
    for (int i = 1; i <= N; i++)
    {
        cin >> A[i];
        sum += A[i];
    }
    int C = sum / 2;
    memset(dp, 0, sizeof(dp));

    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= C; j++)
        {
            if (j < A[i])
            {
                dp[i][j] = dp[i - 1][j];
            }
            else
            {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - A[i]] + A[i]);
            }
        }
    }
// cout << dp[N][C] << '\n';
    cout << fabs(sum - dp[N][C] - dp[N][C]) << '\n';

    return 0;
}
全部评论

相关推荐

03-17 16:55
已编辑
广东工业大学 Web前端
他们都管我叫八股王:个人技能可以放最下面,项目描述点可以不用这么多,把可以被狠狠拷打的点尽量弄的再显眼一些,自己讲不出来的也尽量不要写
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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