湖北可以做网站方案的公司,怎样做网站搜索推广,互联网投诉中心官网入口,wordpress英文版变中文版1007 正整数分组 基准时间限制#xff1a;1 秒 空间限制#xff1a;131072 KB 分值: 10难度#xff1a;2级算法题将一堆正整数分为2组#xff0c;要求2组的和相差最小。例如#xff1a;1 2 3 4 5#xff0c;将1 2 4分为1组#xff0c;3 5分为1组#xff0c;两组和相差1… 1007 正整数分组 基准时间限制1 秒 空间限制131072 KB 分值: 10 难度2级算法题 将一堆正整数分为2组要求2组的和相差最小。 例如1 2 3 4 5将1 2 4分为1组3 5分为1组两组和相差1是所有方案中相差最少的。 Input 第1行一个数NN为正整数的数量。
第2 - N1行N个正整数。
(N 100, 所有正整数的和 10000) Output 输出这个最小差 Input示例 5
1
2
3
4
5 Output示例 1 题目链接http://www.51nod.com/onlineJudge/questionCode.html#!problemId1007 分析 本题要求两个正整数数组的和差那么要使得两个和差最小那么必定每个数组是越靠近sum/2的就是和的中间点 那么我们就可以把这道题目转化为简单的01背包了。 下面给出AC代码 1 #include bits/stdc.h2 using namespace std;3 #define N 100104 int a[N]; 5 int n;6 int dp[N];7 int main(void)8 { 9 while(scanf(%d,n)!EOF)
10 {
11 int sum0;
12 for(int i1;in;i)
13 {
14 cina[i];
15 suma[i];//挑选出一些数字是的越靠近sum/2,那么就是背包问题了
16 }
17 memset(dp,0,sizeof(dp));
18 for(int i1;in;i)
19 for(int jsum/2;ja[i];j--)
20 dp[j]max(dp[j],dp[j-a[i]]a[i]);
21 coutabs((sum-dp[sum/2])-dp[sum/2])endl;
22 }
23 return 0;
24 }