2011年3月14日

dfs拼木棒,剪枝

摘要: hdoj 1455Sticks这题对dfs效率要求比较高,起初乱七八糟的代码果断TLE了。一般来说,dfs时能判断的尽量在上层进行判断,不要带到下层去判断。而且在这题中,如果相连的同样长的小棒不再同样搜索,这点很重要~~~~~~~#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int num[70], n, g_sum, len;bool mark[70];bool dfs( int deep, int po 阅读全文
posted @ 2011-03-14 22:04 CrazyAC 阅读(327) 评论(0) 推荐(0) 编辑

dfs + 回溯

摘要: hdoj 1426 Sudoku Killer数独#include <iostream>using namespace std; struct Node { int x, y;}ns[85]; int cntSum, ca=1;int mp[10][10]; bool init() { int i, j; char ch[5]; cntSum = 0; for( i=0; i<9; ++i ) { for( j=0; j<9; ++j ) { if( scanf( "%s", ch ) == EOF ) return 0; ... 阅读全文
posted @ 2011-03-14 19:17 CrazyAC 阅读(295) 评论(0) 推荐(0) 编辑

双向BFS

摘要: hdoj 1401Solitaire棋盘上有四个棋子,给你两个状态,问可否8步内将一个状态转移到另一个状态。双向BFS。偶这题写了一晚加一个下午,一开始兴致勃勃地单向BFS,当TLE后才发现状态总数估计错误了,应该是(4*4)^8。以后这样的错误要避免撒~~~~然后判重时用 int mark[8][8][8][8][8][8][8][8],一交,超内存了,再次悲剧。其实这样的话内存耗费是(8^8)*4/1024 = 65536K,明显要超的~~~~~ #include <iostream>#include <queue>#include <algorithm> 阅读全文
posted @ 2011-03-14 16:05 CrazyAC 阅读(1933) 评论(0) 推荐(0) 编辑