P1382 光棍组织
我现在TMD连dfs都不会写了
原题:
MM 虽然一辈子只要一个,但是也得早点解决。于是,n 个光棍们自发组成了一个光棍组织
(ruffian organization,By Wind 乱译)。现在,光棍们打算分成几个小组,并且分头为 找 MM 事业做贡献(For example:searching,hunting……By Wind 乱译)。
对于这 n 个光棍的任意一个组合,都有一个被称为“和谐度”的东西,现在,他们想知道, 如何分组可以使和谐度总和最大。
每个光棍都必须属于某个分组,可以一个人一组。
n<=16
恩,把个中分组的方案和价值都直接给了,然后让选择的方案全部&起来等于(1<<n)-1(当然不能有冲突),DP想不到方法,n<=16似乎可以搜索
最开始做的时候是bfs,每次从1到(1<<n)-1找不冲突的方案,这样会T得很惨(至少要((1<<n)-1)^2)
然后容易想到是因为遍历1到(1<<n)-1过程中无效的枚举太多,所以可以直接dfs有效的状态
然后dfs傻逼了写了两天
原来写的:for(int i=z;i<n;i++)if(y&power2[i]) dfs(x,y-power2[i],i+1),dfs(x,y,i+1);
实际上应该是酱紫:if(y&power2[z])dfs(x,y-power2[z],z+1); dfs(x,y,z+1);
原来的内种写法会有非常多的重复
在发现dfs有问题之前一直在怀疑是用了不正确的写法,参考了chad的题解又写了个分治(反向dfs)的,然后才发现dfs制杖了(分治的应该也对了)
经实测,bfs的时候搞一个spfa中的visited来表示这个元素是否在队中,如果在队中就不进队,这个优化效果还是不错的
尝试反向可以是突破点,比如反向搜索,反向枚举,甚至反向DP
代码(分治的丢了):
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;}
int n,a[]; int power_top;
long long f[];
int dui[],tou=; bool visited[];
int power2[]; void get_power2(){power2[]=;for(int i=;i<=;i++)power2[i]=power2[i-]<<;}
void dfs(int x,int y,int z){
if(z==n){
if(f[x|y]<f[x]+a[y]){ f[x|y]=f[x]+a[y];
if(!visited[x|y]) dui[++tou]=x|y,visited[x|y]=true;}
return ;}
if(y&power2[z])dfs(x,y-power2[z],z+); dfs(x,y,z+);}
void bfs(){
memset(visited,,sizeof(visited));
dui[tou=]=; f[]=; visited[]=true;
for(int k=;k<=tou;k++) dfs(dui[k],power_top^dui[k],),visited[dui[k]]=false;}
int main(){//freopen("ddd.in","r",stdin);
memset(f,-,sizeof(f));
get_power2();
cin>>n; power_top=(<<n)-;
for(int i=;i<=power_top;i++) a[i]=read();
bfs();
cout<<f[power_top]<<endl;
//cout<<tou<<endl;
return ;
}
P1382 光棍组织的更多相关文章
- JZYZOJ 1382 光棍组织 状压dp
http://172.20.6.3/Problem_Show.asp?id=1382 水得过分了,本来以为要用lzx学长的写法写,抱着试试看的想法写了个特暴力的dp+dfs,过了,真是... ...
- TODO:GitHub创建组织的步骤
TODO:GitHub创建组织的步骤 使用GitHub进行团队合作,写这个步骤主要作用是为了OneTODO作为一个团队组织进行代码的分享,让更多人来参与. 使用帐号.密码登录GitHub 2.右上角加 ...
- 【组织级项目管理】P2 MSP P3O
组织级项目管理--有你,有我,有大家 在过去的2年,无论对于企业来讲,还是对于我们个人都有很多大脑的冲击,有几个词大家应该特别耳熟能详:转型,变革,敏捷,互联网+,组织的项目化管理等.就是这些让我们的 ...
- 【SAP业务模式】之ICS(四):组织单元的配置
SAP的ICS业务后台配置主要有以下几个配置点: 1.组织单元的配置(公司代码.销售组织.工厂.采购组织等): 2.主数据的部分: 3.订单和开票的定价过程: 4.开票输出类型: 5.公司间发票的配置 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(41)-组织架构
系列目录 本节开始我们要实现工作流,此工作流可以和之前的所有章节脱离关系,也可以紧密合并. 我们当初设计的项目解决方案就是可伸缩可以拆离,可共享的项目解决方案.所以我们同时要添加App.Flow文件夹 ...
- Atitit.uke 团队建设的组织与运营之道attilax总结
Atitit.uke 团队建设的组织与运营之道attilax总结 1. intro引言:2 2. aims组织成立宗旨2 1.1. Mission组织使命2 1.2. val核心价值观2 1.3. c ...
- Atittit.研发公司的组织架构与部门架构总结
Atittit.研发公司的组织架构与部门架构总结 1. archi组织架构与 部门规划2 1.1. 最高五大组织机构2 1.2. 宗教事务部2 1.3. 制度与重大会议委员会2 1.4. 纠纷处理部: ...
- iOS 小谈开发者中的个人、组织(公司、企业)账号
苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...
- Atitit.css 规范 bem 项目中 CSS 的组织和管理
Atitit.css 规范 bem 项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...
随机推荐
- Android两个页面之间的切换效果工具类
import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; ...
- ADO.NET与ORM的比较:NHibernate实现CRUD(转)
原文地址 http://blog.csdn.net/zhoufoxcn/article/details/5402511 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spr ...
- 支付宝即时到账API,网站收到回调页面,输出验证失败,log中responseTxt=错误的问题
看了网上无外乎这三种原因导致: 1.参数编码问题 2.参数多余问题 3.网络延时问题 以上三种可以参考这个网站给出的解决办法:http://blog.csdn.net/zj53hao/article/ ...
- coding题都在考察我们的什么技能
其实不是都在考我们的算法设计,有的时候算法简单,但是coding却可能不那么简单,比如下面这道题目: 题:写一个把字符串的IP地址变成32位整数的函数,要求考察程序健壮性. 这题初看起来一点都不难,但 ...
- php 画图片
<?php // 使用php操作gd库做图 // 1. 创建一个画布资源 $im = imagecreatetruecolor(80, 40); // 2. 画内容 // 2.1 先位画布准备颜 ...
- [转]XSS现代WAF规则探测及绕过技术
初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如果 ...
- Javascript的函数自调
嗯 也不知道怎么翻译self-invoked,就当自调吧. 在看bootstrap的轮播插件源码的时候发现一种新的自调函数的写法(其实应该不新了),开头的一段就卡住了,原谅我是个菜鸟,就顺便记录一下. ...
- Python学习路程day17
常用算法与设计模式 选择排序 时间复杂度 二.计算方法 1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费 ...
- 13个JavaScript图表(JS图表)图形绘制插件【转】
现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...
- UCanCode发布升级E-Form++可视化源码组件库2014 全新版 (V20.01)!
UCanCode发布升级E-Form++可视化源码组件库2014 全新版 (V20.01)! --- UCanCode有史以来最强大的版本发布! E-Form++可视化源码组件库企业版本2014最新版 ...