【问题描述】

  贝希和她的闺密们在她们的牛棚中玩游戏。但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了。贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望。她希望您能够帮帮她,把所有的灯都给重新开起来!她才能继续快乐地跟她的闺密们继续玩游戏!

  牛棚中一共有N(1 <= N <= 35)盏灯,编号为1到N。这些灯被置于一个非常复杂的网络之中。有M(1 <= M <= 595)条很神奇的无向边,每条边连接两盏灯。 每盏灯上面都带有一个开关。当按下某一盏灯的开关的时候,这盏灯本身,还有所有有边连向这盏灯的灯的状态都会被改变。状态改变指的是:当一盏灯是开着的时候,这盏灯被关掉;当一盏灯是关着的时候,这盏灯被打开。

  问最少要按下多少个开关,才能把所有的灯都给重新打开。数据保证至少有一种按开关的方案,使得所有的灯都被重新打开。

【输入格式】

  第一行:两个空格隔开的整数:N和M。
  第二到第M+1行:每一行有两个由空格隔开的整数,表示两盏灯被一条无向边连接在一起。没有一条边会出现两次。

【输出格式】

第一行:一个单独的整数,表示要把所有的灯都打开时,最少需要按下的开关的数目。

【输入样例】

5 6
1 2
1 3
4 2
3 4
2 5
5 3

【输出样例】

3

【样例解释】

一共有五盏灯。灯1、灯4和灯5都连接着灯2和灯3。按下在灯1、灯4和灯5上面的开关。

【数据范围】

1 <= N <= 35  1 <= M <= 595

【来源】

bzoj1770 USACO NOV09 GOLD

这道题其实有2种解法,我在这里就讲一下我考试的时候用的暴力(暴力出奇迹),高斯消元的解法参考下面链接的内容(差不多,就最小值和种类数的差别而已):高斯消元的解法

说的暴力,无非就是枚举每个点按不按(其实直接枚举+优化有60分),想要满分2^35的时间复杂的肯定是不现实的,全部记忆化的话内存都不过。
所以我可以用map记忆一半,前2/n个点我们先枚举,然后记录每种情况的最小次数。然后再枚举后n-2/n个点,出来一种情况就在map里找和它配合的(记住如果直接满了要特判一下),如果有就可以。
时间复杂度(2*2^(2/n)),完全可以过。

详细代码如下:

#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
const int maxn=40;ll a[maxn],b[maxn];
int n,m,ans=55;
ll maxd=0;
map<ll,int>mp;void run(int i,int t,ll s)
{if(i>n/2) {if(!mp[s]||mp[s]>t)mp[s]=t;if(s==maxd) ans=min(ans,t);return;}run(i+1,t,s);run(i+1,t+1,s^b[i]);
}
void run2(int i,int t,ll s)
{if(i>n) {if(mp[maxd-s]) ans=min(ans,t+mp[maxd-s]);if(s==maxd) ans=min(ans,t);return;}run2(i+1,t,s);run2(i+1,t+1,s^b[i]);
}
int main()
{//freopen("lamp.in","r",stdin);//freopen("lamp.out","w",stdout);a[1]=1;for(int i=2;i<=39;i++) a[i]=a[i-1]<<1;scanf("%d%d",&n,&m);int x,y;for(int i=1;i<=n;i++) b[i]=a[i];for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);b[x]+=a[y];b[y]+=a[x];}maxd=a[n+1]-1;run(1,0,0);run2(n/2+1,0,0);cout<<ans;return 0;
}

bzoj1770 USACO NOV09 GOLD 灯(暴力出奇迹)相关推荐

  1. 求最大连续子序列和——解法1 – 暴力出奇迹||解法2 – 分治

    解法1 – 暴力出奇迹 穷举出所有可能的连续子序列,并计算出它们的和,最后取它们中的最大值 空间复杂度:O(1),时间复杂度:O (n 3) class Solution {public int ma ...

  2. 刷新纪录 | 74.7 秒训练完 ImageNet!2048 GPU 暴力出奇迹

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自新智元,禁二次转载 来源 | arXiv 编辑 | 三石.肖琴 ImageNe ...

  3. 牛客小白月赛9: F. 暴力出奇迹(思维题)

    链接:https://ac.nowcoder.com/acm/contest/275/F 来源:牛客网 题目描述 给定一个序列,寻找一对l,r,满足1 ≤ l ≤ r ≤ n 最大化的值 其中表示将a ...

  4. for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题

    问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...

  5. Topcoder SRM 638 DIV 2 (大力出奇迹)

    水题,就是一个暴力.大力出奇迹. Problem Statement   There is a narrow passage. Inside the passage there are some wo ...

  6. 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到计算机

    近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继.科幻电影中,像人类一样思考.决策.学习的强人 ...

  7. 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到现代计算机

    近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继.科幻电影中,像人类一样思考.决策.学习的强人 ...

  8. 数组面试题-大力出奇迹?

    文章目录 数组中重复的数字 二维数组中的查找 旋转数组的最小数字 调整数字顺序使奇数位于偶数前面 数组中出现次数超过一半的数字 最小的k个数 连续子数组的最大和 数字序列中某一位的数字 把数组排成最小 ...

  9. 堆+贪心——nkoj1587【Usaco Nov07 Gold】分配防晒霜

    [Usaco Nov07 Gold]分配防晒霜 Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在 ...

最新文章

  1. 中key的用途_Micro Focus Operations Bridge Manager中的多个(RCE)漏洞
  2. 目标代码文件、可执行文件和库
  3. 大致了解写java聊天器所需要的技术
  4. python多线程和多进程使用
  5. Struts2框架概述及运行流程
  6. java位运算实例详解——(amp;)、(|)、(~)、(^)、(lt;lt;)、(gt;gt;)
  7. VS2013(Win10X64)-配置编译Caffe
  8. how is SAP ui5 shell view implemented
  9. UE4学习-自定义相机视图
  10. 数人云牵手红帽Ansible:七大最佳实践解锁DevOps落地姿势
  11. 阿里巴巴对Java编程【安全规约】的规约
  12. 阿里HBase高可用8年“抗战”回忆录
  13. 4.FreeRTOS学习笔记-消息队列
  14. Windows 下搭建 Ruby 开发环境
  15. 【代码笔记】iOS-performSelectorOnMainThread
  16. C++顺序表(模板总结)
  17. GNU/Linux jpg、png、gif 与 eps 格式的相互转换
  18. 自信心受挫,该如何让项目团队成员重新振作起来
  19. sk_buff 详解(一)
  20. 易中天讲座免费在线学习 免费下载

热门文章

  1. findfont: Font family [‘sans-serif‘] not found. Falling back to DejaVu Sans. findfont: Generic famil
  2. TFTLCD白屏C51调试心得
  3. 苹果快捷键怎么调出来_苹果官宣新春短片《女儿》到底是怎么拍出来的?
  4. paddlehub实现人物抠图换背景
  5. npm 如何提升最新版本 安装 卸载
  6. 【图像重建】基于正则化的图像超分辨重建附matlab代码
  7. 装修公司如何盈利?小伙设计社群模式,成交大量客户!
  8. Linux useradd 命令详解
  9. python to go,Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
  10. 为企业级框架和应用而生--Egg.js