2012年7月22日

PKU 3278 Catch That Cow

摘要: bfs,需要注意0和N是可以到达的,除此之外也可以到达,但实际上不可能更优,因为超过这个范围表明需要回退,回退的步数超过2时,完全可以多走几步再翻倍,结果更优。# include <cstdio># include <queue># include <cstring>using namespace std;# define MAXN 100000 + 5# define N 100000 + 1int n, k;char vis[MAXN];int d[MAXN];int bfs(void){ queue <int> Q; memset(vis, 阅读全文

posted @ 2012-07-22 22:32 getgoing 阅读(286) 评论(0) 推荐(0) 编辑

POJ 2488 A Knight's Journey

摘要: DFS,要求输出字典序最小的,注意扩展方向。# include <cstdio># include <cstring># define N 26 + 5const int dx[] = {-1, 1,-2, 2,-2, 2,-1, 1};const int dy[] = {-2,-2,-1,-1, 1, 1, 2, 2};int p, q, cnt;bool finished;char solu[N][2];char vis[N][N];void dfs(int x, int y){ solu[cnt][0] = x, solu[cnt][1] = y; if (cnt 阅读全文

posted @ 2012-07-22 22:03 getgoing 阅读(209) 评论(0) 推荐(0) 编辑

POJ 2243 Knight Moves

摘要: bfs,使用C++的queue,300ms。# include <cstdio># include <cstring># include <queue>using namespace std;const int dx[] = {1,1,-1,-1,2,2,-2,-2};const int dy[] = {2,-2,2,-2,1,-1,1,-1};struct Pos{int x, y, d;};char s[5], g[5];int sx, sy, gx, gy;int bfs(void){ queue <Pos> Q; Pos cur, nst 阅读全文

posted @ 2012-07-22 20:09 getgoing 阅读(203) 评论(0) 推荐(0) 编辑

POJ 3620 Avoid The Lakes

摘要: dfs,统计最多多少个相邻(有公共边)方块。# include <cstdio># include <cstring># define N 100 + 15int n, m, k;char lake[N][N];int ans, cur;const int dx[] = {0,1,0,-1};const int dy[] = {1,0,-1,0};void dfs(int x, int y){ lake[x][y] = 0, ++cur; for (int i = 0; i < 4; ++i) { int nx = x + dx[i]; int n... 阅读全文

posted @ 2012-07-22 19:31 getgoing 阅读(215) 评论(0) 推荐(0) 编辑

2004选拔赛 最小值

摘要: 给出S和T个整数集合,分别含有n和m个元素(n<=m<=500),问 的最小值。如果a>b && c>d,有|a-c|=|b-d| >= |a-d| + |b-c|(不妨设c>a,然后对d与a,b的大小讨论,可以去掉绝对值符号证明),要对S和T排序。动态规划,if ( i == j) f[i,j] = f[i-1, j-1] + abs( s[i] - t[j] ) ,所以边界条件有 f[0,0] = 0;if (j > i) f[i, j] = min( f[i, j-1], f[i-1, j-1]+abs( s[i] - t[j] 阅读全文

posted @ 2012-07-22 08:32 getgoing 阅读(214) 评论(0) 推荐(0) 编辑

导航