![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
文章平均质量分 78
Crux_D
这个作者很懒,什么都没留下…
展开
-
ZOJ 2278 Fight for Food
相当出色的DP优化题。类似于最大不下降子序列,一般有O(N2)的简单算法。但N>30000,故需要优化。原先的算法中,设F(i)= 到第i只老鼠时捕捉到的最大数目,F(i)= max(F(j)+1),j从1到i-1,假如在时限内能从第i到第j只老鼠出现的方格。这里可以预先使用BFS,用time[rati.i][rati.j][ratj.i][ratj.j]来记录从i到j的最小时间,并加以判断。为了原创 2008-02-11 14:34:00 · 990 阅读 · 1 评论 -
ZOJ 1063 Space Station Shielding
练习floodfill很好的题。第一次考虑从内部有模块的点开始floodfill,发现无法识别内部空仓和外部空仓。反向思考,从外部空仓进入模块,得解。 #include #include int b[60][60][60];bool used[216000];int q[216000];int N, M, K, L;int dir[6][3] ={ {原创 2009-01-15 22:42:00 · 912 阅读 · 0 评论 -
HDOJ 2167 Pebbles
这种类型的题目似乎很常见——方格棋盘,搜索某种状态。你也许会大喊:“嘿,伙计,为什么不再来一份?……”但是我就他喵的又敲了2个钟头,其中莫名其妙的错误就和绵羊身上的毛一样多。在这之前我要承认这是一道很繁琐的题目。第一题目没有给出棋盘的长宽,需要处理字符串;第二当你敲下第200行代码之后再简单的题也会突然变得复杂起来。单纯的搜索是不可能的。N*N= 225,这样的数据规模已经注定了纯搜的原创 2008-05-15 22:23:00 · 742 阅读 · 0 评论 -
ZOJ 1827 The Game of 31
博弈的题目。123456各四张花色,游戏开始时从中抽掉一些牌。每人一次抽取一张相加,和大于31者失败。求必胜策略。设定状态表示为行动结束时剩下的sum。假如每种牌无限制张数,那么就等于抢七,必胜态为0、7、14、21、28。但是当给定一些牌的时候,只能搜索。类似记忆化搜索,注意:牌数量不同,节点的状态也不同。当抢到必胜态之后,上一个可以到达必胜态的节点一定是必败态。以无限制扑克战为例,原创 2008-04-23 19:54:00 · 1338 阅读 · 0 评论 -
ZOJ 1675 Push!!
推箱子的题目,需要记录四个状态量,b[pi][pj][bi][bj]代表人和箱子在某种状态下所需要推动的最小step。 lev是无用记录量,仅作测试使用。#include cstdio>#include string>int dir[4][2] =...{ ...{ 0, 1 }, ...{ 1, 0 }, ...{ - 1, 0 }, ...{ 0, -1 }};int N,原创 2008-03-29 18:03:00 · 885 阅读 · 0 评论 -
ZOJ 1011 NTA
题目不难,但非常恶心,输入需要字符串处理,分明就是考察当年学生的打字速度……我打了一个多钟头,还从scanf换成了cin,真失败。写递归搜索的时候有些没有信心,结果居然一次AC。听起来就像是“直觉告诉我,真相只有一个!”做了一些小处理,比如全置*,然后空节点判断,这样就避免了考虑叶子。 #include iostream>#include string>using names原创 2008-03-27 14:54:00 · 2719 阅读 · 3 评论 -
ZOJ 1100 Mondriaan's Dream
中等难度的DP。铺砖问题,有组合数学公式。 但是用搜索+dp的方法更……好吧,也很难做。研究了一个下午的标程,终于搞懂。把每一层的砖块压缩为二进制编码,搜索上一层到当前层的状态转化是否能够达到。然后从0到11……11Dp。void dfs ( int n, int from, int to ) 表示当前从左往右有n块砖,from表示前n块砖在这一层的编码,to表示下一层。修改了一下,使得1原创 2008-03-22 16:44:00 · 4594 阅读 · 1 评论 -
ZOJ 2411 Link Link Look
第一次写连连看的题目,居然写了一个下午。空格需要采用并查集的方式处理,把相连空格合并。顺便说一句,这题目真是无语。 #include cstdio>#include string>#define MAX 102int spc[MAX][MAX], spr[MAX][MAX], a[MAX][MAX], N, M, T, ans;int init ()...{ scanf ( "%原创 2008-03-17 17:11:00 · 957 阅读 · 0 评论 -
ZOJ 2479 Cover the Rectangular Ground
看上去相当复杂的一道题,实际上有一个强剪枝。计算面积!面积相符合的情况下搜索。为了简便写了一个位操作。当初JTP就是在这道题上战胜了ZJU的…… #include cstdio>#include string>int T, W, L, N, bx[10], by[10], a[30][30], ac, area, ba[10];int v[10], p[10];void init原创 2008-03-15 14:57:00 · 1190 阅读 · 0 评论 -
ZOJ 1227 Free Candies
记忆化搜索。在表达篮子里糖果的状态时采取位操作。记录f(x1,x2,x3,x4)代表当第i列娶到xi个时的最大糖果数量。然后……强搜吧,没什么好说的。也许还可以剪枝,但时限在暴力搜索面前都不堪一击。位操作是相当有趣的hash方法,我得好好练习一下。#include cstdio>#include string>int a[40][4], f[41][41][41][41], N,原创 2008-03-13 12:49:00 · 1346 阅读 · 1 评论 -
八皇后问题的位操作解法
比起普通的搜索剪枝来,由于在每一层的搜索里多加了两个限定条件ld/rd——斜对角线,加之使用取最低位的操作,大大减少了每一层的遍历时间。 这是USACO1.5的最后一题,要求列出字典序遍历结果的前三位。在N=13的情形下,运行时间0.163S。 /*ID: C.D.PROG: checkerLANG: C++*/#include #include #原创 2009-02-12 10:45:00 · 885 阅读 · 0 评论