TYVJ1266 费解的开关】的更多相关文章

恩,这题...... 看看题面想到了啥?炮兵阵地! 再仔细一思考:炮兵阵地是求放置最多,而这个显然可以递推得出. 由于每个格子至多点一次,那么我们发现: 在第一行点击状态确定的情况下,后面每个格子的点击与否都是确定的.那么我们点完之后判断一下最后一行合不合法即可. #include <cstdio> #include <iostream> #include <algorithm> #define say printf("*") using names…
目录 前言 题目链接 思路 代码 前言 博客咕咕咕了好久了,是时候写一下了 题目链接 AcWing 95 费解的开关 思路 首先可以看出 1.每一个位置顶多只会操作一次.因为如果操作两次的话,相当于不操作,必然是不满足最优解 2.在一套方案中,操作的顺序无关紧要. 3.如果我们确定了第I行的操作方案的话,那么后面的行数都可以依此递推,下面给出一个详细的解答. 11011 10110 01111 11111 比如说这个例子,如果我们确定了第1行,那么第二行所有的0(坐标:a[i][j]) 都只能是…
ACAG 0x02-4 费解的开关 对于这道题,我们不难发现如下性质: 每个位置之多被点击一次: 点击的先后顺序不影响结果: 若确定了第$1$行,则接下来可能的点击方案就只有$1$种.具体原因是:当第$i$行某一位为$0$时,此时前$i$行均已确定,所以只能点击第$i+1$行该位置上的数,才能使第$i$行的这一位变成$1$. 于是,我们只需要考虑第一行的点击方法.不难枚举得,共$32$种.我们可以用$0$~$31$的二进制表示点击方法. 然后,对于每种方法,我们可以递推出接下来$2$~$5$行的…
P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态. 游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态.    我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯.下面这种状态 1011101101101111000011011 在改变了最左上角的灯的…
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:http://www.joyoi.cn/problem/tyvj-1266 这道题的状态空间就是经过若干次开关灯之后每盏灯的状态. 然后我们可以一行一行的来开关灯.首先我们得了解两个性质: 1.每一盏灯要么不动它的开关,要么只动一次.(显然) 2.第\(i\)行我们需要按下开关的灯的位置,在第\(i-1\)行必然是关着的.(因为前\(i-1\)行不会再动了,所以我们必须要关这…
你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态. 我们用数字“”表示一盏开着的灯,用数字“”表示关着的灯.下面这种状态 在改变了最左上角的灯的状态后将变成: 再改变它正中间的灯后状态将变成: 给定一些游戏的初始状态,编写程序判断游戏者是否可能在6步以内使所有的灯都变亮. 输入格式 第一行输入正整数n,代表数据中共有n个待解决的…
(题面来自ACwing) 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态. 我们用数字"1"表示一盏开着的灯,用数字"0"表示关着的灯. 给定一些游戏的初始状态,编写程序判断游戏者是否可能在6步以内使所有的灯都变亮. 输入格式 第一行输入正整数n,代表数据中共有n个待解决的游戏…
题解 这道题目有三个状态条件值得考虑: 每一个开关被按0次或者1次才有意义,如果超过1次,那么等同于按0或1次. 最终的结果与按的顺序无关 因为2,所以可以人为地规定比较合理的顺序. 现在以每一行为顺序.先经过一波操作把上一行全部搞成1,然后看这行,如果有0,那么只能按下一行的,以此类推. 起始状态难以把握,但是我们可以使用暴力枚举. 暴力地把第一行分割为2^5种情况. 代码 #include <bits/stdc++.h> using namespace std; int origin[7]…
正解:枚举 解题报告: 入门傻逼题,思维难度不高代码量极小,非常适合上手 然后傻逼的我第二次看这道题的时候依然没想到解法:D 没有办法,就想着写个笔记好歹记录一下以后多复习几次就记着了趴qwq 就是,显然,确定了第一行之后所有的操作都是可以确定的了(之后的行每一步都是为了维护上一个,能懂趴?) 然后就一路推过去 最后看最后一行能否成立就行 然后用点儿位运算,over #include<bits/stdc++.h> using namespace std; #define ll long lon…
传送门 解题思路 枚举第一行的状态,判断后面可不可行. 代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; const int inf = 0x3f3f3f3f; ,tmp[MAXN],now[MAXN][MAXN]; int check(){ ; ;i<=;i++) ret+=tmp[i],now[][i]=tmp[i]; if(ret>=ans)…