【FZU2178】礼物分配
题意
在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个礼物(numv+numw=N)。对于每个礼物他们俩有着各自心中的价值vi和wi,他们要求各自分到的礼物数目|numv-numw|<=1,并且各自所衡量的礼物价值的差值|sumv-sumw|尽可能小,现在他们想知道最小的差值是多少。
分析
这是中途相遇法的模板题
每个礼物要么属于Eric,要么属于R.W,所以如果暴力的话是2^30,显然会超。
使用中途相遇法可以将复杂度降到2^15左右,很是神奇。
1. 先将N个礼物分成两份,第一份有n/2个礼物,第二份有n-n/2个礼物。
2. 然后枚举第一份中有哪些属于Eric,哪些属于R.W。cnt来记录第一份中Eric的礼物数目,sum1是第一份中Eric的礼物价值和,sum2是R.W的礼物价值和。然后用一个vector,把每个sum1-sum2都加到下标为cnt的vector中。
3. 用类似的方法,枚举第二份中哪些属于Eric,哪些属于R.W。sum1,sum2,cnt的含义相同。然后在下标为n-n/2-cnt的vector中找和这个sum1-sum2相加最小的值,然后判断是否要更新ans。
就是这样,用这个题来学中途相遇法了。。。步骤3中的小细节还是比较神奇的。
下面是代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map> using namespace std;
typedef long long LL; const int maxn=;
const int INF=;
int T,n;
int v[maxn],w[maxn];
vector<int>V[maxn]; int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%d",&n);
for(int i=;i<=n;i++)V[i].clear();
for(int i=;i<=n;i++)
scanf("%d",&v[i]);
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
int n1,n2;
n1=n/,n2=n-n1;
int cnt;
LL sum1,sum2;
for(int i=;i<(<<n1);i++){
cnt=,sum1=,sum2=;
for(int j=;j<n1;j++){
if(i&(<<j)){
cnt++;
sum1+=v[j+];
}else
sum2+=w[j+];
}
V[cnt].push_back(sum1-sum2);
} for(int i=;i<=n1;i++){
sort(V[i].begin(),V[i].end());
V[i].erase(unique(V[i].begin(),V[i].end()),V[i].end());
} int ans=INF;
for(int i=;i<(<<n2);i++){
cnt=,sum1=,sum2=;
for(int j=;j<n2;j++){
if(i&(<<j)){
cnt++;
sum1+=v[n1+j+];
}else{
sum2+=w[n1+j+];
}
}
int cnt1,SUM;
cnt1=n2-cnt,SUM=sum1-sum2;
vector<int>::iterator it;
it=lower_bound(V[cnt1].begin(),V[cnt1].end(),-SUM);
if(it!=V[cnt1].end()&&abs(*it+SUM)<ans){
ans=abs(*it+SUM);
}
if(it!=V[cnt1].begin()){
it--;
if(abs(*it+SUM)<ans)
ans=abs(*it+SUM);
}
}
printf("%d\n",ans);
}
return ;
}
【FZU2178】礼物分配的更多相关文章
- fzu2178礼物分配 (状压+二分)
Problem Description 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个礼物(numv+numw=N).对于每个礼物他们俩有着各自心中的价值vi ...
- FZUOJ Problem 2178 礼品配送
Problem 2178 礼物分配 题目链接: Click Here~ Problem Description 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个 ...
- 【HDU 5835】Danganronpa(分配礼物)
10种礼物,每种有ai个,每个小朋友分两个礼物,其中普通礼物要求相邻两人的不能一样,求最多分给几个小朋友. sum/2是最多的情况.什么时候发不了那么多,就是当max很大,无论怎么发,都发不完max. ...
- bzoj 3920: Yuuna的礼物
Description 转眼就要到Karin的生日了!Yuuna她们想为她准备生日礼物!现在有许多礼物被排列成了一个一维序列,每个礼物都有一个价值.Yuuna对这个序列十分感兴趣.因此,你需要多次回答 ...
- debug阶段团队贡献分分配
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 debug阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.5 谭力铭 3. ...
- beta-review阶段贡献分分配
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-review阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.1 ...
- beta-1 阶段各组员的贡献分分配
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-1阶段各组员的贡献分分配如下: 姓名 团队贡献分 谭力铭 5.2 沈柏杉 5.1 程媛媛 4 ...
- jQuery动画-圣诞节礼物
▓▓▓▓▓▓ 大致介绍 下午看到了一个送圣诞礼物的小动画,正好要快到圣诞节了,就动手模仿并改进了一些小问题 原地址:花式轮播----圣诞礼物传送 思路:动画中一共有五个礼物,他们平均分布在屏幕中,设置 ...
- mysql 5.7中的用户权限分配相关解读!
这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...
随机推荐
- ballerina 学习三 根据swagger 以及protobuf 生成code
备注: 基本环境安装就不用介绍了,swagger 以及grpc 同时也不用介绍了,都是比较简单的代码,就是一个简单的测试 1. 初始化项目 ballerina init 项目结构如下: ├── R ...
- saas 系统租户个性化域名&&租户绑定自己域名的解决方案
实际的需求就类似github 的自定义page 1. 个性化域名 github 实现原理就是用户个性化域名使用泛域名解析,这个比较简单,大部分域名提供商都可以解决 具体操作不用赘述 ...
- wordpress上传文件,插件无法建立目录(根本原因解决)
刚建立的wp网站经常遇到上传图片或者下载插件“无法建立目录”的问题,肯定是权限的问题,网上大部分解决方案都是把uploads或者 plugins权限手动改成777, 有一部分人成功了,有一部分没成功, ...
- wordpress分享到微信无缩略图的问题
牛逼的老板想把他牛逼的艺术品分享给牛逼的画家和藏家简直苦逼了我这个程序狗,他想要的结果是这样的qq和微信上依次为 但是牛逼的微信越来越“抠”了现在不是微信开发者用不了他的分享接口不给你显示缩略 ...
- The SDK platform-tools version ((21)) is too old to check APIs compiled with API 23
android studio是个坑爹的工具,每次打开文件头都出现如上错误提示. 解决方法: Update your android sdk platform-tools to the revision ...
- 简单服务端缓存API设计
Want 我们希望设计一套缓存API,适应不同的缓存产品,并且基于Spring框架完美集成应用开发. 本文旨在针对缓存产品定义一个轻量级的客户端访问框架,目标支持多种缓存产品,面向接口编程,目前支持简 ...
- golang的sync包例子
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func asyncTestFunc() ...
- webpack快速入门(二):使用入门
继续之前请确认你已经安装了nodejs 安装.初始化: 然后找个目录新建名为webpack-demo的文件夹,然后在命令行下进入该目录,执行以下命令: npm init -y npm install ...
- linux 文件结构
Linux常见的目录解释: 目录 描述 / 根目录 /bin 做为基础系统所需要的最基础的命令就是放在这里.比如 ls.cp.mkdir等命令:功能和/usr/bin类似,这个目录中的文件都是可执行的 ...
- 设计模式之——Composite组合模式
上周面试,面试官问桥接模式是什么,我就举了个例子:手机分为苹果,小米....,每个手机都有视频,游戏...等功能.直观上是一个树形结构.这种情况下,可以用桥接模式,把手机作为接口,苹果,小米等继承手机 ...