0
点赞
收藏
分享

微信扫一扫

A1113 Integer Set Partition (25 分| 排序,附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 理解题意
  • 把1个集合分成两个不相交集合,使得2个集合元素个数相差最小,2个集合总和之差最大
  • 逻辑分析
  • 把集合内n个元素排序,计算前n/2个元素总和,用总和sum – 2 * halfsum即为 |S1– S2|
  • |n1 – n2|就是n % 2的结果,奇数为1,偶数为0
  • 题目简单,10分钟a题
  • 略水

测试用例

input:
10
23 8 10 99 46 2333 46 1 666 555
output:
0 3611

input:
13
110 79 218 69 3721 100 29 135 2 6 13 5188 85
output:
1 9359

ac代码

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
int n, sum = 0, halfsum = 0;

scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d", &v[i]);
sum += v[i];
}
sort(v.begin(), v.end());
for(int i=0; i<n/2; i++)
halfsum += v[i];
// 累加1次,做差1次
printf("%d %d", n%2, sum-2*halfsum);

return 0;
}


举报

相关推荐

PAT刷题之旅 1113-Integer Set Partition

0 条评论