格子

杭电HDU OJ 2045题题解

旧时模样 提交于 2019-12-28 20:32:47
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2045 不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题: 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 以上就是著名的RPG难题. 如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧? Input 输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。 Output 对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。 Sample Input 1 2 Sample Output 3 6 Author lcy Source

bfs和dfs(第一次尝试)

99封情书 提交于 2019-12-22 15:17:19
DFS和BFS的各种例题 DFS和BFS区别 走迷宫 BFS DFS DFS和BFS区别 bfs是广搜,一般是找最优解和最小路径,但是因为是一层一层的查找,所以就不适合分支太多,或者深度太深的 dfs是深搜,它解决了这个弱点,但是不能找出最优解,只能知道有解 走迷宫 描述   一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。   给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 输入   第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)   接下来是R行,每行C个字符,代表整个迷宫。   空地格子用’.‘表示,有障碍物的格子用’#‘表示。   迷宫左上角和右下角都是’.’。 输出   输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。 样例输入 5 5 …## #…# #.#.# #.#.# #.#… 样例输出 9 BFS 未优化代码实现: ( 可跳过 ) # include <stdio.h> int vst [ 1000 ] [ 1000 ] = { 0 } ; struct state { //记录可走的那个位置的深度以及坐标 int x , y ; int step_counter ; } a [

插头Dp总结

▼魔方 西西 提交于 2019-12-10 10:39:04
T1 HDU1693:Eat the Trees 题目大意:给出n*m的方格,有些格子不能铺线,其它格子必须铺,可以形成 多个 闭合回路。问有多少种铺法? 插头Dp板子题,题目要求可以是多个回路, 只需要两个状态,代表是否有插头即可 $plug_1$ $plug_2$ 0 0 新建一个插头插向两边 0 1 转/不转弯 1 0 同上 1 1 合并插头 T2 Ural 1519 Formula 1 题目大意:一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数 与T1不同的是必须是一个闭合回路 类似于括号匹配,两个插头代表是左右 $plug_1$ $plug_2$ 0 0 新建一个插头插向两边 0 1 转/不转弯 0 2 同上 1 0 同上 1 1 合并插头,并且把$plug_2$的右插头改为左插头 1 2 注意这种情况一定是一对插头碰到了一起,直接判断是不是最后一个方块统计答案或者弃掉 2 0 转/不转弯 2 1 直接合并 2 2 合并插头,并把$plug_1$的左插头改为左插头改为右插头 T3 神奇游乐园 题目描述 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回。在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼。往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计。娱乐场可以看成是一块大小为n×m的区域,且这个n×m的区域被分成n

公司笔试题

 ̄綄美尐妖づ 提交于 2019-12-10 06:28:15
(1)跳格子,现在有n个格子顺序排列,一只兔子从头开始跳,它一次可以跳1个格子,也可以跳2个格子……它也可以跳n个格子。求兔子跳进第n个格子总共有多少种跳法。 这是一个关于数列的题,可以这样去想一个存在递归的问题: 假如我要跳到第 n 个格子,那么就必须要在前一步跳到第 n−1 或者 n−2 个格子,如果说跳到第 n 个格子用的次数为 a_n,那么 a_n =a_(n−1)+ a_(n−2)。 注意,在这个地方有一个理解问题,为什么在等式的右侧没有系数:尽管 n−2 能够通过移动一个格子移动到 n−1 的位置,但是这样会导致计算的重复性,因此前面不加系数,直接可以默认为从 n−2个格子是跳一次移动两个格子到 n 的这个位置。 那么,根据这样的想法,去求解这个数学问题就很简答了,就直接是斐波那契数列了:对于前面的跳格子的跳法进行计算,后面的就可以根据前面两项进行求和计算。 格子数 1 2 3 4 5 6 7 8 9 10 跳法 1 2 3 5 8 13 21 34 55 89 当然,如果是步长设置最长为3,那么就相当于这个项的前面三项的值进行求和即可 格子数 1 2 3 4 5 6 7 8 9 10 跳法 1 2 4 7 13 24 44 81 149 274 以此类推,后面的格子可以根据前面的格子跳法来求和进行计算。 (2)4、编写一个线程程序、实现A线程先循环2次

[区间DP][SCOI2009]粉刷匠

白昼怎懂夜的黑 提交于 2019-12-04 09:29:27
题目描述 windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。 输入格式 第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。 输出格式 包含一个整数,最多能正确粉刷的格子数。 输入输出样例 输入 3 6 3 111111 000000 001100 输出 16 说明/提示 30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。 题解 f[i][j][k][0/1]为刷到第i行第j个 刷了k次 错误粉刷 或刷对 的刷对的格子数 最后这一维转移的讨论避免枚举断点,优化时间复杂度 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int n,m,t; 5 char a[52][52]; int f[52][52][2505][2]; 6 int main() 7 { 8

递推

落花浮王杯 提交于 2019-12-03 10:10:06
HDU 2045 •题意   有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green) 三色涂每个格子;   每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色;   求全部的满足要求的涂法; •题解(递推)   定义 $f[i]$ 表示 $i$ 个格子的总方案数;   假设 $f[1],f[2],\cdots ,f[i-1]$ 已经求出,如何求出 $f[i]$ 呢?   考虑到这一点 $i$ 与 $i-1$ 不同色,同时 $i$ 与 $1$ 也不同色;   $i$ 个格子的总方案数是不是可以分为以下两种:   ① 第 $i-1$ 个格子与第 $1$ 个格子不同色   ② 第 $i-1$ 个格子与第 $1$ 个格子同色   对于情况①,已知 $f[i-1]$ 求解的是 $i-1$ 与 $1$ 不同色的总方案数,所以,情况①的答案为 $f[i-1]$;   对于情况②,因为第 $i-1$ 个格子与第 $1$ 个格子同色,且第 $i-1$ 个格子与第 $i-2$ 个格子不同色;   也就是说,求解第 $i-1$ 个格子与第 $1$ 个格子同色的总方案数可以转化为求解第 $i-2$ 个格子与第 $1$ 个格子不同色的总方案数;   易得 $f[i-2]$ 就是解,又因为第 $i-1$ 个格子与第 $1$ 个格子同色,所以,第 $i$ 个格子有两种选择;  

SSL-ZYC P2624 (洛谷P3355)【24题】骑士共存问题

匿名 (未验证) 提交于 2019-12-03 00:32:02
题目大意: 思路: 这题是真的烦。。。 n<=200的数据很容易让我们想到匈牙利算法,所以就打了一发匈牙利。 然后T了。。。 于是就开始优化。 优化了我2个小时。。。 匈牙利算法(二分图) 不难发现,上图黄色格子不能攻击到其他黄色黄色格子,红色格子不能攻击到其他红色格子。 那么就可以把图以 奇偶 拆分,形成二分图。 然后枚举每个点一级他可以攻击到的点(增广路)。 最后用总格子数 最大匹配 = = 最多能放的骑士个数。 代码: #include<cstdio> #include<cstring> using namespace std ; const short dx[ 8 ]={ 1 , 1 ,- 1 ,- 1 , 2 , 2 ,- 2 ,- 2 }; const short dy[ 8 ]={- 2 , 2 ,- 2 , 2 ,- 1 , 1 ,- 1 , 1 }; //八个方向 int n,m,sum,eve,odd,g[ 202 ][ 202 ],link[ 20002 ],a[ 20002 ][ 3 ],xx,yy,f; bool vi[ 20002 ],ok[ 202 ][ 202 ]; char ch; int read() //输入流 { f= 0 ; while (ch=getchar(),ch<= 47 ||ch>= 58 );f=(f<< 3 )+(f<< 1

20191030-带返回值的回溯算法Leetcode解数独

巧了我就是萌 提交于 2019-12-02 23:53:44
题目描述 编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 '.' 表示。 一个数独。 答案被标成红色。 Note: 给定的数独序列只包含数字 1-9 和字符 '.' 。 你可以假设给定的数独只有唯一解。 给定数独永远是 9x9 形式的。 输入格式: [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]] 输出格式: [['5', '3', '4', '6', '7', '8',

蓝桥c格子填数

匿名 (未验证) 提交于 2019-12-02 23:06:17
题目: 方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 代码: #include <iostream> using namespace std ; int mapp [ 3 ][ 4 ], book [ 10 ], ans = 0 ; int abs ( int c ) { return c >= 0 ? c :- c ; } bool check ( int l , int r , int key ) { if ( l == 0 && r == 0 ) return true ; else if ( l == 0 ) //第一行时只需要判断右边 差值大于1 return abs ( key - mapp [ l ][ r - 1 ]) > 1 ; else if ( r == 0 ) //第一列 上 右上 差值大于1 return abs ( key - mapp [ l - 1 ][ r ]) > 1 && abs ( key - mapp [ l - 1 ][ r + 1 ])> 1 ; else if ( r != 3 ) return

51 nod 1486 大大走格子

余生长醉 提交于 2019-12-02 04:50:22
有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数。(只能向右和向下走) S: 用组合数计算从x到y的方案数,C(n,m)=>x相差N步,y相差m步 走n+m,其中向下走N步的方案数 然后从前往后枚举,去除掉不合法状态,自带容斥 来源: https://www.cnblogs.com/lsyyy/p/11730485.html