PAT_甲级_1113 Integer Set Partition

题目大意

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

算法思路

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

提交结果

image.png

AC代码

#include 
#include 
#include 

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;
}

你可能感兴趣的:(c++数据结构和算法)