乐趣区

关于c++:PAT甲级1113-Integer-Set-Partition

题目粗心

给定一个汇合,含有 n 个数字,要求将其划分为长度为 n1 和 n2 的两个汇合,并且要求两个汇合和之差最大,n1 与 n2 的差距最小

算法思路

最为直观的感触就是将数组进行排序,而后选取 n / 2 长度的前半部分为第一个局部, 剩下的为第二局部,这样两者元素个数之差最小,和之差最大。

提交后果

AC 代码

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    int n, sum = 0, temp = 0;
    scanf("%d", &n);
    int v[n];
    for (int i = 0; i < n; i++) {scanf("%d", &v[i]);
        sum += v[i];
    }
    sort(v, v+n);
    for (int i = 0; i < n / 2; i++)
        temp += v[i];
    printf("%d %d", n % 2, sum - 2 * temp);
    return 0;
}
退出移动版