摘要: 由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态数,让状态能够表示是从1还是从0转移过来的.(这题有个解法是采用多进制的状态压缩). 网上瞄了别人的一眼解题报告. 瞬间顿悟,竟然三层之间发生关系,那么就直接把连续的两层记录起来,虽然说空间上不及多进制优美. 但是却能够去描述这些个问题.代码如下:#include <cstdio>#include <cstring>#include <cstdlib>#incl 阅读全文
posted @ 2013-01-15 21:33 沐阳 阅读(461) 评论(0) 推荐(0) 编辑
摘要: #include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>#define MOD 100000000using namespace std;/*题意:给定一个矩阵,这个矩阵表示了一块土地,给定的数据只有0,1, 表示土地肥沃与否. 其中0代表不肥沃,1代表肥沃. 不肥沃的地方是不能够种植玉米的,还有一个约束就是 不能够在相邻的1种植玉米. 现在问一共有多少种种植方式. 解法:明显的状态压缩题,先dfs出一行的非 阅读全文
posted @ 2013-01-15 17:29 沐阳 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 这题要考虑锤子移动到网格外部的情况,否则WA,处理的方式就是行和列同时增加5(最大距离).详见代码:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <iostream>using namespace std;/*题意:给定一个N*N的矩阵, 然后在这个矩阵的每个格子在任意时间会出现一个鼹鼠,这个出现 出现鼹鼠的时间是输出信息所确定的. 现在你手里有一把锤子能够去锤这些鼹鼠. 你能 够移动锤子,移动的两点之间的距离不能超过 阅读全文
posted @ 2013-01-15 16:15 沐阳 阅读(431) 评论(0) 推荐(0) 编辑