bzoj1770 USACO NOV09 GOLD 灯(暴力出奇迹)
【问题描述】
贝希和她的闺密们在她们的牛棚中玩游戏。但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了。贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望。她希望您能够帮帮她,把所有的灯都给重新开起来!她才能继续快乐地跟她的闺密们继续玩游戏!
牛棚中一共有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 – 暴力出奇迹||解法2 – 分治
解法1 – 暴力出奇迹 穷举出所有可能的连续子序列,并计算出它们的和,最后取它们中的最大值 空间复杂度:O(1),时间复杂度:O (n 3) class Solution {public int ma ...
- 刷新纪录 | 74.7 秒训练完 ImageNet!2048 GPU 暴力出奇迹
点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自新智元,禁二次转载 来源 | arXiv 编辑 | 三石.肖琴 ImageNe ...
- 牛客小白月赛9: F. 暴力出奇迹(思维题)
链接:https://ac.nowcoder.com/acm/contest/275/F 来源:牛客网 题目描述 给定一个序列,寻找一对l,r,满足1 ≤ l ≤ r ≤ n 最大化的值 其中表示将a ...
- for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题
问题描述: 笔者在文本分类场景中使用了roberta+pool+dense的三分类模型.采用预训练模型做项目的时候经常苦于数据太少,模型泛化性差,因此收集了1300W数据.在我尝试暴力出奇迹的时候,遇 ...
- Topcoder SRM 638 DIV 2 (大力出奇迹)
水题,就是一个暴力.大力出奇迹. Problem Statement There is a narrow passage. Inside the passage there are some wo ...
- 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到计算机
近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继.科幻电影中,像人类一样思考.决策.学习的强人 ...
- 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到现代计算机
近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继.科幻电影中,像人类一样思考.决策.学习的强人 ...
- 数组面试题-大力出奇迹?
文章目录 数组中重复的数字 二维数组中的查找 旋转数组的最小数字 调整数字顺序使奇数位于偶数前面 数组中出现次数超过一半的数字 最小的k个数 连续子数组的最大和 数字序列中某一位的数字 把数组排成最小 ...
- 堆+贪心——nkoj1587【Usaco Nov07 Gold】分配防晒霜
[Usaco Nov07 Gold]分配防晒霜 Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在 ...
最新文章
- 网络营销——网络营销专员浅析网站推广营销关键词是重点
- 怎么检查python是否安装成功-检查python以及django是否安装配置成功
- 聚集索引与非聚集索引的总结
- OPPO R9凭创新赢得2000万销量,成2016年热销手机
- idea怎么找到路径下面的js_怎么找到Win7桌面存储路径?怎么把Win7桌面转到D盘?...
- gdiplustypes min max找不到标识符_当年月销过万的比亚迪宋MAX,为何突然不香了?...
- Download failed : Oracle JDK 7 is NOT installed,解决oracle jdk7的问题
- 【转】python os.popen 超时问题
- 【备忘】Windows的命令行下设置网络代理
- zookeeper入门及进阶
- C/C++[入门最后两题]
- Dubbo+Zookeeper视频教程
- 透视特洛伊木马程序开发技术
- 最新大数据案例分享:2019微信数据报告(图集)
- 【chp2】车万翔-自然语言处理:基于预训练模型的方法
- 数学分析教程(科大)——3.6笔记+习题
- 双人对战的球类游戏ios源码项目
- 高德地图api接口免费查询天气实战案例,axios请求查询天气,js版,【接上一篇微信测试号推送纪念日】
- C#设置按钮鼠标进入时半透明样式
- 澳洲学计算机难毕业吗,澳洲新南威尔士大学计算机专业好吗
热门文章
- GTA5无法访问R星服务器问题
- 20162329张旭升 2016-2017-2 《程序设计与数据结构》第七周学习总结
- 计算机专业16字口号大全,激励口号霸气点的16字
- Linux -> 安装Redis
- 真Untiy3_对官方表面Shader怕是有什么误解
- 计算机一级考试试题app,2016年全国计算机一级考试试题附答案
- 软件架构师应该知道的97件事之概括16 -30
- 常见快捷键eclipse
- 京东,你玩的是众筹还是预售?
- win10中Edge浏览器打不开网页 崩溃 兼容性问题 STATUS_INVALID_IMAGE_HASH