[题解](折半搜索/高斯消元枚举自由元)BZOJ_1770_Lights
状压,时间空间都不行,如果每次搜索一半就可以省下很多空间,用map记下每种状态的答案,最后再把两次的答案合并
然而正解是高斯消元解异或方程组,最后搜索自由元
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
using namespace std;
const int maxn=;
const int maxm=;
int n,m,p,ans=,fl;
ll f[maxn];
map<ll,int>mx;//每种状态的最小代价
void dfsl(int x,ll s,int k){
if(x==m){
int &t=mx[s];//注意传址的引用
if(!t)t=k;
else if(t>k)t=k;
return;
}
dfsl(x+,s,k);
dfsl(x+,s^f[x],k+);
}
void dfsr(int x,ll s,int k){
if(x==m){
int t=mx[s];
if(t && t+k-<ans)ans=t+k-;
return;
}
dfsr(x+,s,k);
dfsr(x+,s^f[x+m],k+);
}
int main(){
scanf("%d%d",&n,&p);
if(n&)n++,fl=;//处理折半搜索
m=n/;
for(int i=,x,y;i<=p;i++){
scanf("%d%d",&x,&y);
x--,y--;
f[x]|=1LL<<y,f[y]|=1LL<<x;
}
for(int i=;i<n;i++)f[i]|=1LL<<i;
dfsl(,(1LL<<n)-,);
dfsr(,,);
printf("%d",ans-fl);
}
[题解](折半搜索/高斯消元枚举自由元)BZOJ_1770_Lights的更多相关文章
- poj1222 EXTENDED LIGHTS OUT 高斯消元||枚举
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8481 Accepted: 5479 Description In an ...
- POJ 3185 The Water Bowls(高斯消元-枚举变元个数)
题目链接:http://poj.org/problem?id=3185 题意:20盏灯排成一排.操作第i盏灯的时候,i-1和i+1盏灯的状态均会改变.给定初始状态,问最少操作多少盏灯使得所有灯的状态最 ...
- POJ 1681 Painter's Problem(高斯消元+枚举自由变元)
http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...
- Luogu1092 NOIP2004虫食算(搜索+高斯消元)
暴力枚举每一位是否进位,然后就可以高斯消元解出方程了.然而复杂度是O(2nn3),相当不靠谱. 考虑优化.注意到某一位进位情况的变化只会影响到方程的常数项,于是可以在最开始做一次高斯消元算出每个未知数 ...
- POJ 1753 Flip game ( 高斯消元枚举自由变量)
题目链接 题意:给定一个4*4的矩阵,有两种颜色,每次反转一个颜色会反转他自身以及上下左右的颜色,问把他们全变成一种颜色的最少步数. 题解:4*4的矩阵打表可知一共有四个自由变元,枚举变元求最小解即可 ...
- POJ 1681 Painter's Problem (高斯消元 枚举自由变元求最小的步数)
题目链接 题意: 一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右 都将改变颜色): 给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要 ...
- POJ 1681 高斯消元 枚举自由变元
题目和poj1222差不多,但是解法有一定区别,1222只要求出任意一解,而本题需要求出最少翻转次数.所以需要枚举自由变元,变元数量为n,则枚举的次数为1<<n次 #include < ...
- POJ 1753 Flip Game (高斯消元 枚举自由变元求最小步数)
题目链接 题意:4*4的黑白棋,求把棋全变白或者全变黑的最小步数. 分析:以前用状态压缩做过. 和上题差不多,唯一的不同是这个终态是黑棋或者白棋, 但是只需要把给的初态做不同的两次处理就行了. 感觉现 ...
- poj 3185 The Water Bowls 高斯消元枚举变元
题目链接 给一行0 1 的数, 翻转一个就会使他以及它左右两边的都变, 求最少多少次可以变成全0. 模板题. #include <iostream> #include <vector ...
随机推荐
- LwIP移植uCos+stm32f407
LwIP同操作系统一起工作的时候模型如下: 1.TCP/IP协议栈和应用程序以分离的任务运行 2.应用同协议栈沟通是通过API函数调用(API函数调用事实上就是通过OS自带的进程间通信机制,由应用程序 ...
- python把字典写入excel之一例
直接上代码: # -*- coding: utf-8 -*- import xlsxwriter #生成excel文件 def generate_excel(expenses): workbook = ...
- 在Eclipse Java EE编译器中修改Web项目的发布名称
在工程目录上右键, 选properties, 弹出属性窗口, 选中Web Project Settings, 在右边的Context root中修改保存即可 死马当做活马医 在你的工程目录下找到.se ...
- Git基本用法1
二.git的初始化 在使用git进行代码管理之前,我们首先要对git进行初始化. 1.Git 配置 使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录 ...
- java 基于百度地图API GPS经纬度解析地址
首先这是百度地图api 的接口地址,基于接口的参数,不过多介绍,其中都提供相应的介绍: http://lbsyun.baidu.com/index.php?title=webapi/guide/web ...
- ZOJ3496 Assignment
传送门 这题也是真恶心-- 题目大意是俩公司要运货,每条路有容量上限.然后B公司手里有p个--(技能点?)如果在一条路上放了x个技能点,这条路经过了y个货物,那么B公司就会收x*y的钱.现在要求的是, ...
- 使用json-lib的JSONObject.toBean( )时碰到的日期属性转换的问题
今天碰到这样一个问题:当前台以JSON格式向后台传递数据的时候,对于数据中的日期属性,无法正常转换为相应的Date属性.JSON数据是这样的:{"birthday":"1 ...
- 查看Spring源码的方法
来自为知笔记(Wiz)
- 【217】◀▶ IDL 控制语句说明
参考:Statements Routines —— 控制语句关键字 01 FOR 循环语句. 02 FOREACH 循环语句. 03 WHILE...DO 循环语句. 04 IF... ...
- hdu-2563
统计问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...