D98jc. 集合划分
时间限制:1.0s 内存限制:256.0MB 代码提交间隔:3分钟(现在可以提交)
输入文件名:sets.in 输出文件名:sets.out
问题描述
给定n个整数,请将这n个整数分为两部分(个数不一定要等),使得第一部分的和大于且尽量接近第二部分的和的两倍。
输入格式
从文件sets.in中读入数据。
输入的第一行包含一个整数n。
第二行包含n个整数,表示给定的数。
输出格式
输出到文件sets.out中。
你不需要输出具体的划分方案,只要输出第一部分的和减去第二部分的和的两倍的值。
样例输入
4
3 8 7 4
样例输出
1
样例说明
3, 8, 4为一部分,7为另一部分,(3+8+4)–2×7=1。
数据规模和约定
对于40%的数据,1 ≤ n ≤ 20,给定的每个数为不超过100的正整数。
对于100%的数据,1 ≤ n ≤ 100,给定的每个数为不超过1000的正整数。
给定n个整数,请将这n个整数分为两部分(个数不一定要等),使得第一部分的和大于且尽量接近第二部分的和的两倍。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- threenewbee 2023-04-21 20:36关注
#include <iostream> #include <algorithm> #include <cmath> using namespace std; const int MAXN = 20; int n; int a[MAXN]; int solve(int k, int sum1, int sum2) { if (k == n) return abs(sum1 - 2 * sum2); int ans1 = solve(k + 1, sum1 + a[k], sum2); // 将a[k]分到第一部分 int ans2 = solve(k + 1, sum1, sum2 + a[k]); // 将a[k]分到第二部分 return min(ans1, ans2); } int main() { cin >> n; int sum = 0; for (int i = 0; i < n; i++) { cin >> a[i]; sum += a[i]; } cout << solve(0, 0, 0) << endl; return 0; }
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Linux权限管理相关操作(求解答)
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表
- ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
- ¥15 android 打包报错
- ¥15 关于stm32的问题
- ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?