题意

在双胞胎兄弟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】礼物分配的更多相关文章

  1. fzu2178礼物分配 (状压+二分)

    Problem Description 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个礼物(numv+numw=N).对于每个礼物他们俩有着各自心中的价值vi ...

  2. FZUOJ Problem 2178 礼品配送

    Problem 2178 礼物分配 题目链接: Click Here~ Problem Description 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个 ...

  3. 【HDU 5835】Danganronpa(分配礼物)

    10种礼物,每种有ai个,每个小朋友分两个礼物,其中普通礼物要求相邻两人的不能一样,求最多分给几个小朋友. sum/2是最多的情况.什么时候发不了那么多,就是当max很大,无论怎么发,都发不完max. ...

  4. bzoj 3920: Yuuna的礼物

    Description 转眼就要到Karin的生日了!Yuuna她们想为她准备生日礼物!现在有许多礼物被排列成了一个一维序列,每个礼物都有一个价值.Yuuna对这个序列十分感兴趣.因此,你需要多次回答 ...

  5. debug阶段团队贡献分分配

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 debug阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.5 谭力铭 3. ...

  6. beta-review阶段贡献分分配

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-review阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.1 ...

  7. beta-1 阶段各组员的贡献分分配

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-1阶段各组员的贡献分分配如下: 姓名 团队贡献分 谭力铭 5.2 沈柏杉 5.1 程媛媛 4 ...

  8. jQuery动画-圣诞节礼物

    ▓▓▓▓▓▓ 大致介绍 下午看到了一个送圣诞礼物的小动画,正好要快到圣诞节了,就动手模仿并改进了一些小问题 原地址:花式轮播----圣诞礼物传送 思路:动画中一共有五个礼物,他们平均分布在屏幕中,设置 ...

  9. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...

随机推荐

  1. Terraform 多云管理工具

    1. 介绍   Terraform is a tool for building, changing, and versioning infrastructure safely and efficie ...

  2. minio 安装以及使用

    1. 为了方便使用 docker 安装 docker run -p 9000:9000 minio/minio server /export   注意启动显示的 appkey secretkey  C ...

  3. JS实现动态提示框

    引言 什么项目都有个需求,应开发需求,需要写一个公式编辑器选择公式的插件,下面给大家讲一下实现过程.(擦汗,强作淡定,咳,开嗓~) 看图说话 本小菜开发功能前乐于先写个需求思维导图(纯属个人爱好): ...

  4. Protel 99 铺铜的一个坑 Pour Over Same

    Protel 99 铺铜的一个坑 Pour Over Same 好久没用 Protel 99 了,修改了一个旧的 PCB 文件. 需要修改线路,由于改了线路需要重新铺铜,得重新画铺铜的边框. 以下这个 ...

  5. 执行npm install报错:npm ERR! code EINTEGRITY

    命令行执行npm install报错如下: D:\frontend\viewsdev>npm install npm ERR! code EINTEGRITY npm ERR! sha512-8 ...

  6. Oracle数据库clob字段导出为sql insert插入语句

    oracle数据库的clob字段导出为sql insert插入语句可以分三种情况:1,clob没有换行符:2,clob有换行符但不以分号结尾:3,clob有换行符并且以分号结尾. clob没有换行符使 ...

  7. java web 程序---购物车选商品,购买,付款

    思路:1.有一个单选按钮,让我们选择商品   2.购买的物品及 数量清算 3.付款 我的界面: home.jsp <body> <center> 选择您购买的商品 <br ...

  8. [Java][Web]利用 referer 防盗链

    String referer = request.getHeader("referer"); if(referer == null || !referer.startsWith(& ...

  9. Nginx启停

    启动nginx /usr/local/nginx/nginx #不指定配置文件地址/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx. ...

  10. 009:JSON

    一. MySQL JSON类型 1. JSON介绍 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级 ...