给定一个数组,将其分成两部分,使得这两部分数组的和的差最小。本质上是01背包问题。

#include<iostream>

#include<vector>
#include<algorithm>
using namespace std;
int help(vector<int> nums)
{
      int n = nums.size();
      if (n == 0)
            return 0;
      if (n == 1)
            return nums[0];
      int sum = 0;
      for (int i = 0; i < n; i++)
      {
            sum += nums[i];
      }
      vector<vector<int>> s(n + 1,vector<int>(sum/2+1,0));
      for(int i=1;i<=n;i++)
            for (int j = 1; j <= sum / 2; j++)
            {
                  s[i][j] = s[i-1][j];
                  if (nums[i-1] <= j && s[i-1][j - nums[i-1]] + nums[i-1] > s[i-1][j]) {
                        s[i][j] = s[i-1][j - nums[i-1]] + nums[i-1];
                  }
            }
      return sum-2*s[n][sum / 2];
}
int main()
{
      int n;
      cin >> n;
      int temp;
      int ret;
      vector<int> nums;
      while (n--)
      {
            cin >> temp;
            nums.push_back(temp);
      }
      ret = help(nums);
      cout << ret;
      system("pause");
      return 0;
}

两个子数组和的差最小相关推荐

  1. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

    此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...

  2. 网易实习生算法组编程题二:求数组的两个子数组和的最大值

    求一个正整数数组的两个子数组,使其和相等,找出满足这样要求的子数组和的最大值,若不存在,则返回-1.比如[1,1,2,3,5,20],结果为6. #include<iostream> #i ...

  3. 背包问题变种:将数组分成两部分使得两部分的和的差最小

    题目: 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小.比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小 ...

  4. 华为OD机考--TVL解码--GPU算力--猴子爬台阶--两个数组前K对最小和--勾股数C++实现

    勾股数 题目0001 题目描述: 如果三个正整数A.B.C ,A²+B²=C²则为勾股数 如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数, 则称其为勾股数元组. 请求出给定n~m范围 ...

  5. 交换两个数组 差最小 java_如何交换两个等长整形数组使其数组和的差最小(C和java实现)...

    1 importjava.util.Arrays;2 3 /** 4 *5 *@authorAdministrator6 *7 */ 8 public classTestUtil {9 private ...

  6. 问题 A: 第二题(划分一个集合为差值最小的两个子集合)

    题目描述 一个数组中有若干正整数,将此数组划分为两个子数组,使得两个子数组各元素之和a,b的差最小,对于非法输入应该输出ERROR. 输入 数组中的元素 输出 降序输出两个子数组的元素和 样例输入 1 ...

  7. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...

  8. LeetCode 2035. 将数组分成两个数组并最小化数组和的差

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个 ...

  9. 2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?

    福哥答案2020-11-24: 背包问题:背包容量是SUM/2. 每个物体的体积是数的大小,然后尽可能的装满背包. golang代码如下: package mainimport ("fmt& ...

  10. 两个数组结果相减_学点算法(三)——数组归并排序

    今天来学习归并排序算法. 分而治之 归并算法的核心思想是分而治之,就是将大问题转化为小问题,在解决小问题的基础上,再去解决大问题.将这句话套用到排序中,就是将一个大的待排序区间分为小的待排序区间,对小 ...

最新文章

  1. 如何添加显示桌面图标置于快速启动栏
  2. 最新wingide6破解方法(支持Linux),亲测有效,支持python3.0
  3. NLP:基于textrank4zh库对文本实现提取文本关键词、文本关键短语和文本摘要
  4. excel转latex,markdown,html表格的神仙网站!科研必备!
  5. mybatis复杂查询环境 多对一的处理 按照结果嵌套处理和按照查询嵌套处理
  6. 关于datediff(year,开始日期,结束日期)中year格式的说明,特别注意year两边不能加引号,否则报错...
  7. 如何:在Spring中使用@Conditional和Condition注册组件
  8. 数据结构 —— 树状数组
  9. Oracle 9i初始化参数文件
  10. ATA接口寄存器描写叙述
  11. Linux操作系统中修改hostname
  12. acm路上的一些感想
  13. 拓端tecdat|Prophet在R语言中进行时间序列数据预测
  14. 国科大学习资料--自然语言处理(宗成庆)-2016期末考试题
  15. 度量学习Metric Learning
  16. 5G无线接入网架构及关键技术
  17. 使用MindStudio进行MindX SDK财务票据OCR识别开发
  18. 最新十大域名注册商.com域名注册量排行榜
  19. Android模拟点击的四种方式
  20. 数据处理(一)数据清洗

热门文章

  1. SQL Server 事务隔离级别详解
  2. Cache 应用程序数据缓存
  3. jstree静态生成树并为树添加触发事件
  4. Android API之android.view.View.MeasureSpec
  5. struts2标签库使用小结
  6. LAMP(Linux+Apachd+Mysql+Php)搭建网站环境
  7. iOS开发基础 - UIDataDetectorTypes
  8. 从维基百科到裴松之注三国志
  9. android 动画基础,Android 动画基础
  10. 登录,注册,个人信息,退出的隐藏和出现