Day4:T3搜索 T4数学题排列组合
T3:搜索
很出名的题吧,费解的开关
同T2一样也是一题很考思考的
附上题解再解释吧:
对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一行需要改变状态的位置都在上一行中不亮的灯的正下面,因为只有这样才能使上一行的灯全亮。我们枚举第一行的状态改变方法(共2^5种),对于每种方法都依次改变下面几行的状态使上面一行灯全亮。到最后一行我们需要判断是否最后一行也恰好全亮,并更新最小步数。
首先需要找到第一行的状态,怎么写?枚举深搜啊
找到了其中一种第一行的状态之后呢?按照题解所说的,改变上一行中不亮的灯的正下面...怎么写?模拟啊不用说了吧
为什么是这样改变?因为需要把状态全部推到最后一行,判断是否可行
之后就是根据思路模拟模拟dfs一下即可了:
var
a,g:array[0..6,0..6] of longint;
n,i,j,ans:longint;
k:char; procedure huan(x,y:longint);//对(x,y)进行操作
begin
a[x,y]:=1-a[x,y];
end; procedure work(x:longint);//开始在第一排的状态已经确定的前提下进行其他行的操作
var
i,j,k:longint;
begin
g:=a;//temp数组
k:=x;//初始值表示已经操作过了几次 当然这个k不总是0
for i:=1 to 4 do
for j:=1 to 5 do
if a[i,j]=0 then
begin
huan(i,j);huan(i+1,j);huan(i+2,j);huan(i+1,j-1);huan(i+1,j+1);//将这个点下面一格的灯操作一下
inc(k);
end;
for i:=1 to 5 do
if a[5,i]=0 then break//如果还有灯是关着的那么就结束.
else
if i=5 then
if k<ans then ans:=k;//如果全部都是开着的那么就更新答案
a:=g;
end; procedure cq(x,y:longint);
begin
if x=6 then work(y)//如果有六个灯了那么就开始找 一开始的初始步骤数为y
else
begin
cq(x+1,y);//找下一个灯
huan(1,x);huan(1,x-1);huan(2,x);huan(1,x+1);//操作一个灯
cq(x+1,y+1);//找下一个灯
huan(1,x);huan(1,x-1);huan(2,x);huan(1,x+1);//回溯~
end;
end; begin
readln(n);
for n:=n downto 1 do//n可以这样用
begin
ans:=7;//用于更新答案(如果可以)
for i:=1 to 5 do
begin
for j:=1 to 5 do
begin
read(k);
a[i,j]:=ord(k)-48;
end;
readln;
end;//读入数据
cq(1,0);//cq(x,y)表示找第一排的x个灯有y个被操作过的情况(当然是没有重复的)
if ans<7 then writeln(ans) else writeln(-1);
readln;
end;
end.
T4:排列组合
数学题(感觉自己数论方面略弱...需要多练多总结才行)
准备睡觉了...晚安
Day4:T3搜索 T4数学题排列组合的更多相关文章
- [leetcode] 题型整理之排列组合
一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...
- Codeforces Gym 100187D D. Holidays 排列组合
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D ...
- Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合
C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- UVa Problem 10132 File Fragmentation (文件还原) 排列组合+暴力
题目说每个相同文件(01串)都被撕裂成两部分,要求拼凑成原来的样子,如果有多种可能输出一种. 我标题写着排列组合,其实不是什么高深的数学题,只要把最长的那几个和最短的那几个凑一起,然后去用其他几个验证 ...
- HDU 4497 GCD and LCM(分解质因子+排列组合)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...
- Day2:T3DP(基于排列组合思想)
T3:DP(基于排列组合思想的状态转移) 其实之前写排列组合的题目有一种很茫然的感觉.... 应该是因为之前没有刷过所以没有什么体会 上次刷的vj1060有用到,但是写状态转移还是第一次学习吧 ccy ...
- Codeforces 140E(排列组合、dp)
要点 主要学到的东西:一个序列染色,相邻不染同色,恰用\(j\)种颜色的1.模式数.2.方案数.3.具体染色数. 从大的思路上来讲:先dp预处理出每一层的模式数:\(f[i][j]\)表示\(i\)个 ...
- 自然语言处理(NLP) - 数学基础(1) - 排列组合
正如我在<自然语言处理(NLP) - 数学基础(1) - 总述>一文中所提到的NLP所关联的概率论(Probability Theory)知识点是如此的多, 饭只能一口一口地吃了, 我们先 ...
- 10.1 csp-s模拟测试(b) X国的军队+排列组合+回文
T1 X国的军队 贪心,按$b-a$的大小降序排序,然后就贪心吧 #include<iostream> #include<cstdio> #include<algorit ...
随机推荐
- HDU 2647 Reward(图论-拓扑排序)
Reward Problem Description Dandelion's uncle is a boss of a factory. As the spring festival is comin ...
- STL algorithmi算法s_sorted和is_sorted_until(28)
is_sort原型: ::is_sorted default (1) template <class ForwardIterator> bool is_sorted (ForwardIte ...
- C++达到String分类
这是一个非常经典的面试题,能够测试学生很短的时间C++法师是综合,答案应包含C++大多数知识类,保证书String符类可以完成值.抄.的变量和其它函数的定义. #include<iostream ...
- 1005. 继续(3n+1)猜想 (25) (ZJUPAT 数学)
主题链接:http://pat.zju.edu.cn/contests/pat-b-practise/1005 卡拉兹(Callatz)猜想已经在1001中给出了描写叙述.在这个题目里.情况略微有些复 ...
- js中prototype用法(转)
JavaScript能够实现的面向对象的特征有:·公有属性(public field)·公有方法(public Method)·私有属性(private field)·私有方法(private fie ...
- 无废话WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- Mobile开发的饕餮盛宴-Zoomla!波CMS2 x2.1正式宣布
饕餮 [tāo tiè] 古代汉族神话传说中龙的第五子,是一种存在于传说.想象的神奇怪兽. 古书<山海经>介绍其特点是:其形状如羊身人面,其目在腋下,虎齿人爪.其音如婴儿. 作为中国本土软 ...
- Windows平台配置Appium+Java环境
1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装 ...
- Intel 的面试经历中国研究院
那么今天写Intel 的面试经历中国研究院.Intel我采访了面试题比较简单的一. 第一次是在大约下午五时三十, 我正在食堂和好几个基友吃20元巨资买的清蒸草鱼.正在吐沫星子四处飞溅的时候.一个010 ...
- 【动态规划】leetcode - Maximal Square
称号: Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square contain ...