2016级算法第三次上机-D.双十一的抉择
915 双十一的抉择
思路
中等题。简化题目:一共n个数,分成两组,使得两组的差最接近0,就是说要使两组数都尽可能的接近sum/2。
思路还是很混乱的,不知道如何下手,暴力也挺难的,还不能保证对。想一想,从一堆数中取出一些使得和尽可能接近sum/2,把sum/2当作背包总体积,每个数字当作每件物品的体积,价值都是为1,求的就是最大价值。完完全全的01背包问题,问题解决,具体可见参考代码。
这里就不再详细讲解01背包了,请仔细研读《背包九讲》,务必学习到经典DP问题之背包问题的精髓。
分析
01背包的时间复杂度是 \(O(V*N)\)。
参考代码
//
// Created by AlvinZH on 2017/10/24.
// Copyright (c) AlvinZH. All rights reserved.
//
#include <cstdio>
#include <cstring>
int n, sum;
int V;//背包体积
int N[1005];//把数量同时看作物品的体积和价值
int dp[50005];
int main()
{
while(~scanf("%d", &n))
{
sum = 0;
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; ++i) {
scanf("%d", &N[i]);
sum += N[i];
}
V = sum / 2;//背包的体积
//01背包
for (int i = 1; i <= n; ++i) {
for (int j = V; j >= N[i]; --j) {
int temp = dp[j - N[i]] + N[i];
if(dp[j] < temp) dp[j] = temp;
}
}
if(sum - 2 * dp[V] == 0) printf("GF&SI\n");
else printf("%d\n", sum - 2 * dp[V]);
}
}
/* 分析:一共n个数,分两组,使得两组的差最接近0,就是说要使两组数都尽可能的接近sum/2。
* 很自然的想到这是在类似于取东西,看怎么取得平均。
* 所以只需要对一组进行求算使它最接近sum/2,那样的话另一组自然也是最接近的。
* 典型的01背包问题,sum/2作为背包总体积,每袋糖数量作为价值和体积,求最多可以装多少。
*/
2016级算法第三次上机-D.双十一的抉择的更多相关文章
- 2016级算法第三次上机-G.Winter is coming
904 Winter is coming 思路 难题.首先简化问题, \(n\) 个0与 \(m\) 个1排成一列,连续的0不能超过x个,连续的1不能超过y个,求排列方法数. 显然会想到这是动态规划. ...
- 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方
905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...
- 2016级算法第三次上机-B.Bamboo和巧克力工厂
B Bamboo和巧克力工厂 分析 三条流水线的问题,依然是动态规划,但是涉及的切换种类比较多.比较易于拓展到n条流水线的方式是三层循环,外层是第k个机器手,里面两层代表可切换的流水线 核心dp语句: ...
- 2016级算法第三次上机-F.ModricWang的导弹防御系统
936 ModricWang的导弹防御系统 思路 题意即为:给出一个长度为n的序列,求出其最长不降子序列. 考虑比较平凡的DP做法: 令\(nums[i]\) 表示这个序列,\(f[x]\) 表示以第 ...
- 2016级算法第三次上机-E.ModricWang's Polygons
930 ModricWang's Polygons 思路 首先要想明白,哪些多边形可能是格点正多边形? 分情况考虑: 三角形不可能,因为边长为有理数的正三角形的面积为无理数,而格点三角形的面积为有理数 ...
- 2016级算法第三次上机-A.Bamboo的小吃街
A Bamboo的小吃街 分析 经典的两条流水线问题,题目描述基本类似于课件中的流水线调度,符合动态规划最优子结构性质 关键的动态规划式子为: dp[0][j] = min(dp[0][j - 1], ...
- 2016级算法第六次上机-E.Bamboo之吃我一拳
Bamboo之吃我一拳 分析 当两个点的距离<=d时,才可以出拳,想要使得满足出拳条件的点对最少但不为0 寻找最近点对距离,得到的最近距离能够使得可以出拳的组数最少,因为除了最近点对外其他组合均 ...
- 2016级算法第六次上机-A.Bamboo之寻找小金刚
Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...
- 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水
Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...
随机推荐
- Openssl sess_id命令
一.简介 sess_id指令是一个调试工具,用来处理SSL_SESSION结构的,可以打印出其中的细节 二.语法 openssl sess_id [-inform PEM|DER] [-outform ...
- [C++] Variable storage space
Variable storage space
- Spring.net方法的替换
.为什么有时候你再执行某个方法的时候比如某个操作 a.权限验证 b.任务执行 当我执行到这个方法的时候,我可以先验证权限,如果验证不通过则替换到另一个方法去执行 public class MyValu ...
- hdu 2049 不容易系列之(4)——考新郎 (错排递推)
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个 ...
- IDEA设置与快捷键记录
一:代码提示大小写设置 二:设置代码检查等级 IntelliJ IDEA 对于编辑大文件并没有太大优势,很卡,原因就是它有各种检查,这样是非常耗内存和 CPU 的,所以为了能加快大文件的读写,我一般会 ...
- 基于Xcode5的本地化
一.程序名国际化 1.首先添加应用对多语言支持的国际化文件 点击工程根目录,然后选择PROJECT下的项目,然后选择Info选项卡,在底部可以看到Localizations,点击“+”号,可以 ...
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
DBML: [Function(Name="dbo.p_GetStudyStageSubjectGroup")] public ISingleResult<STUDYSTAG ...
- PyCharm社区版+Django搭建web开发环境-1
PyCharm开源社区版不像商业版那样可以直接通过Django来创建项目,必须通过以下几个步骤进行: 1. 创建项目:在cmd命令行下输入:django-admin startproject Demo ...
- MVC4 Action 方法的执行
1. ActionInvoker 的执行: 在MVC 中 包括Model绑定与验证在内的整个Action的执行是通过一个名为ActionInvoker的组件来完成的. 它同样具有 同步/异步两个版本 ...
- Oracle数据表转换为Shapefile(二)
在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...