题目

一对双胞胎兄妹同一天过生日,这一天,他们的朋友给他俩送来了礼物,每个人送的礼物都是2本书,一本给哥哥,一本给妹妹,但没有说明哪本是给妹妹的,哪本是给哥哥的,每本书都有自己的价值,为了避免冲突,让你来分配,要求使得两人所获得书本的价值和之间的差距尽可能的小。

例如,有4个礼物:(3,5),(7,11),(8,8),(2,9),可以把3,7,8,2分配给妹妹,其余的给哥哥,价值差为:5+11+8+9-3-7-8-2=13;如果把3,7,8,9给妹妹,其余的给哥哥,价值差为:3+7+8+9-5-11-8-2=1,这是最好的方案。

思路

想要使得两人的价值差最小,就要让两个人的价值尽可能的接近。我们先看最差的一种情况,也就是价值差最大的情况,让其中一个人每次都拿价值最小的那一本书(这里假设每次都是哥哥拿价值最少的书)。
对于样例来说礼物分配完之后哥哥拿的书总价值为3 + 7 + 8 + 2 也就是 20,而妹妹拿的书的总价值为5 + 11 + 8 + 9 也就是33,两人之间的价值差为13

从图中不难看出,想要使得两人最后的总价值尽可能的接近,只需要把妹妹比哥哥多出来的部分尽可能地分一半给哥哥。

解决方法

把每份礼物中的两本书的差价当作一个新的物品,用一个变量sum记录所有的差价和(也就是新的物品的价值的和)然后对sum的 一半 跑一个01背包就好了

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 45100;
int dp[N], v[N];
int main(){int n, sum = 0;cin >> n;for(int i = 1; i <= n; i++){int a, b;cin >> a >> b;v[i] = abs(a - b);sum += v[i];}int mm = sum >> 1;for(int i = 1; i <= n; i++)for(int j = mm; j >= v[i]; j--)if(dp[j] < dp[j - v[i]] + v[i])dp[j] = dp[j - v[i]] + v[i];cout << abs(sum - dp[mm] - dp[mm]);return 0;
}

生日礼物(背包问题)相关推荐

  1. ACM1881 01背包问题应用

    01背包问题动态规划应用 acm1881毕业bg 将必须离开的时间限制看作背包容量,先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始(背包容量)到它的延长时间进行遍历: 1 # ...

  2. 算法设计与分析第4章 动态规划(一)【背包问题】

    第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...

  3. c语言-01背包问题

    01背包问题 问题:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 分析: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选 ...

  4. 如何在高精度下求解亿级变量背包问题?

    导读:国际顶级会议WWW2020将于4月20日至24日举行.始于1994年的WWW会议,主要讨论有关Web的发展,其相关技术的标准化以及这些技术对社会和文化的影响,每年有大批的学者.研究人员.技术专家 ...

  5. 漫画:阿里巴巴四十大盗的故事-背包问题

    今天,跟大家分享一个我关注了很久的公众号「兔保哥」.这个号是我看着她一点点写起来的,既有财经媒体人的客观严谨,又有身为妈妈的温暖贴心.如果你想用保险的力量守护家庭.为爱人遮风挡雨,可以关注她. --- ...

  6. 背包问题(多重背包+0-1背包)

    一:0-1背包问题 #include<iostream> #include<algorithm> #include<cstring> const int maxn= ...

  7. 三十四、动态规划解决01背包问题

    一.动态规划算法介绍 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步一步获取最优解的处理算法. 动态规划算法与分治算法类似,其基本思想是将待求解的问题分解成若干个子问题,先求子问题, ...

  8. 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题

    packageBasePart;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException ...

  9. 01背包和完全背包问题

    01背包和完全背包问题 posted on 2019-04-20 17:39 sofu6 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/dusf/ ...

最新文章

  1. 虚拟机VMware操作系统安装
  2. #pragma message的作用
  3. 深度学习(十二)稀疏自编码
  4. 2022年美国大学生数学建模竞赛——Problem E:林业固碳
  5. 从send函数和sendto函数参数的不同看TCP和UDP的差别
  6. java学习(一)多态
  7. POJ 3126 Prime Path 简单广搜(BFS)
  8. Ubuntu 16.04 安装 搜狗输入法 sogou input
  9. linux离线安装pg数据库
  10. jdk32位安装包下载_PS2018下载AdobePhotoshopCC2018安装激活教程
  11. Assign array to a variable before exporting as module default
  12. 夜神模拟器+Burp抓包(简直是后端复现调试的福音)
  13. 虎牙、斗鱼同道同命:共同御寒
  14. 怎么用c语言画余弦函数,用c语言绘制余弦函数图像
  15. intellij idea报错:类文件具有错误的版本 61.0, 应为 52.0
  16. 商云通安装(一):电信搭建SIP电话环境
  17. MacPorts卡在正在运行软件包脚本解决方法
  18. bootloader的功能介绍
  19. 星速配资:煤炭概念板块指数上行 跑赢上证指数
  20. 汉化软件Radialix 3的使用

热门文章

  1. 数据分析常用五个方法三个模型(逻辑分析、多维度拆解、对比分析、假设验证、相关性分析、RFM模型、漏斗分析模型、AARRR模型)
  2. el-menu设置侧边栏使选项默认高亮与当前网址一致
  3. 做空无异于飞蛾扑火,什么时候才能一帆风顺?
  4. openJDK源码下载及阅读
  5. 美国首只杠杆比特币期货ETF开盘,成交量近550万美元!
  6. 联翔股份——2022年5月10日申购
  7. 解决Vmware Workstation环境下CentOs7网络连接激活失败的问题
  8. python3*1**3 表达式输出结果为_下列 Python语句的输出结果是?
  9. 硬件设计基础 —— 电流、电压、功率
  10. 用计算机弹吃鸡,Win10系统玩吃鸡提示游戏缺少msvcp140.dll的解决方法