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 ...
随机推荐
- [Network]Introduction and Basic concepts
[该系列是检讨计算机网络知识.因为现在你想申请出国.因此,在写这篇博客系列的大多数英语.虽然英语,但大多数就是我自己的感受和理解,供大家学习和讨论起来] 1 Network Edge The devi ...
- document.domain跨域
原文:[转载]document.domain跨域 document.domain 用来得到当前网页的域名. 比如在地址栏里输入: javascript:alert(document.domain); ...
- 【Android界面实现】可旋转的汽车3D模型效果的实现
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 今天要给大家介绍的是怎样实现可旋转的汽车3D模型. 先看实现效果 这仅仅是静态图,实际上,这个模型是能够依据 ...
- hdu Online Judge
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1073 数据判断,主要是如何判断WA和PE,吸收字符! 代码: #include <stdio.h ...
- hive 的分隔符、orderby sort by distribute by的优化
一.Hive 分号字符 分号是SQL语句结束标记,在HiveQL中也是,可是在HiveQL中,对分号的识别没有那么智慧,比如: select concat(cookie_id,concat(';',' ...
- 一款非常棒的纯CSS3 3D菜单演示及制作教程
原文:一款非常棒的纯CSS3 3D菜单演示及制作教程 这段时间比较忙,很久没在这里分享一些漂亮的HTML5和CSS3资源了,今天起的早,看到一款很不错的CSS3 3D菜单,觉得非常上眼,就将它分享给大 ...
- Metrics监控应用
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前 ...
- LeetCode——Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...
- linux系统管理命令--系统测试工具
1.tcpdump -n 使用IP地址表示主机,而不是主机名的:使用数字port号码,而不是服务名 -i 指定要监听的网卡接口, "-i any"表示抓取全部网卡接口上的数 ...
- Struts2和Struts1的主要区别(完整版)
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Act ...