光棍组织

MM 虽然一辈子只要一个,但是也得早点解决。于是,n 个光棍们自发组成了一个光棍组织
(ruffian organization,By Wind 乱译)。现在,光棍们打算分成几个小组,并且分头为 找 MM 事业做贡献(For example:searching,hunting……By Wind 乱译)。
对于这 n 个光棍的任意一个组合,都有一个被称为“和谐度”的东西,现在,他们想知道, 如何分组可以使和谐度总和最大。
每个光棍都必须属于某个分组,可以一个人一组。

这应该是一个很经典的问题了,不像01背包每个物品只有放或不放两个决策,不像普通的连续的分组dp只有放前面的组和自己再创一个组两个决策;

这个问题的物品是可以放在任意一个组里的,这就对后面的决策有了后效性;

但如果纯粹的dfs,按照阶乘的复杂度,很容易爆掉;

我之后的思路是分治,就是枚举当前这个集合的所有组合,然后找到与之对应的互补的组合,两边分别dfs+记忆化搜索;

发现好难实现啊,网上找到了标程,转化成了c++版本,好厉害啊,orz;

附标程:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cstdlib>
 6 #include<ctime>
 7 #include<vector>
 8 #include<algorithm>
 9 #include<queue>
10 #include<map>
11 using namespace std;
12 #define LL long long
13 int n;
14 int a[70000],f[70000];
15 int b[17];
16 string g(int x){
17     string s="";
18     while(x){
19         if(x%2)s=‘1‘+s;
20         x/=2;
21     }
22     return s;
23 }
24 int dfs(int i){
25     if(i==0)return 0;
26     if(f[i]>0)return f[i];
27     int x,y,z,tn;
28     x=i&(-i);
29     y=i&(~x);
30     z=0;
31     do{
32         tn=dfs(y-z)+a[x|z];
33         if(tn>f[i])f[i]=tn;
34         z=((z|(~y))+1)&y;
35     }while(z);
36     return f[i];
37 }
38 int main(){
39     freopen("1.in","r",stdin);
40     freopen("1.out","w",stdout);
41     scanf("%d",&n);
42     for(int i=1;i<=(1<<n)-1;i++)scanf("%d",&a[i]);
43     printf("%d",dfs((1<<n)-1));
44 }

付个人理解:

以往的枚举2进制的所有组合都是用+1的手法来做的,这个标程也不例外;

i的二进制一般是这10100...101010010(类似);

((z|(~y))+1)&y实现了仅在原来i的二进制中是1的点的进位;

很好很强大;学习了;

时间: 2024-11-08 01:17:56

光棍组织的相关文章

JZYZOJ 1382 光棍组织 状压dp

http://172.20.6.3/Problem_Show.asp?id=1382 水得过分了,本来以为要用lzx学长的写法写,抱着试试看的想法写了个特暴力的dp+dfs,过了,真是... 代码 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 c

光棍节的表白句子说说,光棍节的由来

光棍节的说说 摘要:情侣们可以把每一个节日都过成情人节,单身们可以把每一个节日都过成光棍节. 1.那些暗恋我的人啊,你们怎么那么沉得住气啊! 2.其实我过不过光棍节无所谓,只要我喜欢的人也过光棍节就好了. 3.光棍节在家玩连连看,然后一对一对的消灭你们. 4.对于光棍而言,光棍节就好像大姨妈一样,来一次痛一次. 5.光棍节让我一个人过,情人节让我一个人过,平安夜让我一个人过,圣诞节让我一个人过,有本事考试也让我一个过啊! 6.有没有人和我一样,每次都过光棍节,但也每次错过情人节. 7.有人问我光

东莞市光棍网络有限公司简介

概述 东莞市光棍网络有限公司是中国互联网行业的一家高科技服务型公司,旗下网站有超钱创投网与88订单网.超钱创投网为专业的融资与投资对接平台,破除了行业固有规律,当前运营免一切费用,免费发布资金与项目信息,免费查看联系信息.88订单网为订单综合类No.1,是为广大企业工厂提供订单信息服务平台. 超钱创投网 www.168eai.com 一.超钱创投网做专业的融资与投资对接平台,当前运营免除了一切费用,破除了行业固有规律,免费发布资金与项目信息,免费获得投资与融资机会,免费查看联系信息,方便好项目找

angularJs项目实战!01:模块划分和目录组织

近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap + D3 + requirejs 的架构来实现它.angularjs早在去年6月份我就有所接触,将它应用在实验室项目的个别页面中,11月份在新浪的时候也将其推荐给了所在云事业部项目组.项目组老大程辉等人都是很有技术敏感性的人,大胆地采纳了我的建议,将之应用于原本使用dojo开发的项目前端模块上.然

linux内核探索之内存管理(二):linux系统中的内存组织--结点、内存域和页帧

本文主要参考<深入linux内核架构>(3.2节)及Linux3.18.3内核源码 概述:本文主要描述了内存管理相关的数据结构:结点pg_data_t.内存域struct zone以及页帧(物理页):struct page ,以及该结构相关的一些基本概念. 1. 概述 内存划分为接点,每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t. 各个结点又划分为内存域,比如DMA内存域,高端内存域,普通内存域. 内核内存域的宏: enum zone_type { #ifdef CONF

Kaldi语料的两种切分/组织方式及其处理

text中每一个文本段由一个音频索引(indexed by utterance) 使用该方式的egs:librispeech.timit.thchs30.atc_en.atc_cn 语料的组织形式为: 一个音频(包含一个语句)对应一个文本(包含一个文本段) 或 一个音频(包含一个语句)对应一个文本(包含多个文本段)中的一个文本段 text中每一个文本段由一个时间片索引(indexed by segment) 使用该方式的egs: tedlium.atc0_comp_LDC94S14A 时间片由s

Jquery组织Form表单提交之Form submission canceled because the form is not connected

有时候导出Excel时需要根据某些条件筛选数据,然后将数据通过NPOI生成Excel并导出.组织数据时可以通过放到一个表单中,某些场景是使用脚本(如:jquery)组织一个form(通过字符串拼接),然后将这个from的转换成jquery对象或者Dom对象,再调用对应的submit方法. 例子如下,有一个html页面 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co

计算机相关组织整理

ECMA ECMA是"European Computer Manufactures Association"的缩写,中文称欧洲计算机制造联合会. 是1961年成立的旨在建立统一的电脑操作格式标准--包括程序语言和输入输出的组织.这个组织的目标是评估,开发和认可电信和计算机标准 万维网联盟,又称W3C理事会. 1994年10月在麻省理工学院计算机科学实验室成立.建立者是万维网的发明者蒂姆·伯纳斯·李. 万维网联盟是国际最著名的标准化组织.1994年成立后,至今已发布近百项相关万维网的标准

《拯救你的注意力》:4星。很多重要的领导力技能,包括情商、组织和战略思考能力都起源于对注意力的把控。

4篇文章的合集,写作时间大致是最近3-5年内的.篇幅比较短,但是信息量还是相对比较大的.我给4星. 其中提到了刷微信,看上下文说的是美国的事情,相信是编辑或译者给改的. 以下是书中一些我认为比较重要的信息的摘抄,#号后面是kindle电子书中的页码: 1:克利福德·纳斯(CliffordNass)与他在斯坦福大学的同事最近研究发现,频繁在不同内容间切换的人在注意力.记忆力和任务掌控力上皆不如注意力集中一处的人.数字化分心使得人们在办公室和家中的效率及参与度下降.#35 2:研究人员指出,只要拿着