搜索
无敌大饺子
这个作者很懒,什么都没留下…
展开
-
POJ 2488 A Knight's Journey
经典的骑士巡游问题,注意字典序最小,应该从上到下,从左到右遍历#include #include #include using namespace std;const int maxn=30;int di[]={-1,1,-2,2,-2,2,-1,1},dj[]={-2,-2,-1,-1,1,1,2,2},n,m;bool vis[maxn][maxn];vectorsta原创 2013-04-04 21:45:12 · 822 阅读 · 0 评论 -
HDU1614 | UVA 103 Stacking Boxes
数塔类型的dp,记忆化搜索就可以了.注意杭电的输出最后有一个空格.#include #include #include #include using namespace std;const int MAX = 31;struct Box{ int id, dims[11];}boxes[MAX];bool g[MAX][MAX];int dp[MAX], fa[MAX]原创 2014-03-10 09:01:29 · 745 阅读 · 0 评论 -
ZOJ 1005 - Jugs | UVA 571 - Jugs
广搜水过去了,状态很少.#include #include #include #include using namespace std;const int MAX = 10001001;const char * ins[] ={"fill A", "fill B", "empty A", "empty B", "pour A B", "pour B A"};struct Nod原创 2014-03-07 20:56:51 · 491 阅读 · 0 评论 -
ZOJ 2358 Sum of Factorials
回溯法打表下,就可以了.#include #include using namespace std;const int tb[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};bool ans[1000001];int n;void dfs(int ci,int sum){ ans[sum] = 1; if(ci >=原创 2013-05-14 16:10:25 · 563 阅读 · 0 评论 -
ZOJ 1798 Granny's Bike
哈密尔顿回路问题,n比较小,可以用搜索解决.#include #include #include using namespace std;const int maxn = 11;int g[maxn][maxn], n;bool vis[maxn];bool dfs(int u, int left){ if(left == 0 && u == 0){ return tr原创 2013-05-14 13:35:52 · 819 阅读 · 0 评论 -
ZOJ 1168 Function Run Fun
看到题目第一想法就是记忆化搜索,然后就写了.#include #include #include #include using namespace std;int dp[21][21][21];int w(int a, int b, int c){ if(a <=0 || b<= 0 || c<=0){ return 1; } else if( a > 20 || b原创 2013-05-14 09:23:16 · 510 阅读 · 0 评论 -
ZOJ 2734 Exchange Cards(DFS)
本以为这样搜索可能过不了,交了之后发现数据很弱.#include #include using namespace std;const int maxn = 11;int val[maxn],num[maxn];int n, m, ans;void dfs(int cnt, int ci){ if(cnt > n)return; else if(cnt == n){ ans原创 2013-05-24 16:39:20 · 510 阅读 · 0 评论 -
ZOJ 2475 Benny's Compiler(DFS)
主要用的是dfs注意如果 x 引用x 那么是可以的.#include #include #include using namespace std;const int maxn = 110;int n, e;bool g[maxn][maxn], vis[maxn];bool dfs(int u){ vis[u] = 1; for (int i = 1; i <= n;原创 2013-05-09 19:27:12 · 567 阅读 · 0 评论 -
ZOJ 1002 Fire Net (搜索 || 二分图)
可以把一行分成多行,一列分出多列,然后用行和列坐标之间建二分图,求最大匹配.#include #include #include using namespace std;const int maxn = 40;char grid[5][5];bool g[maxn][maxn], vis[maxn];int rg[5][5], cg[5][5], fa[maxn], n, m原创 2013-05-08 21:18:53 · 820 阅读 · 0 评论 -
POJ 3126 Prime Path
素数打表,普通广搜 #include #include #include using namespace std;struct state{ int num,cost; state(int nnum=0,int ccost=0):num(nnum),cost(ccost){}};const int maxn=10010;bool table[10010],vis[maxn原创 2013-04-05 21:34:21 · 402 阅读 · 0 评论 -
POJ 3278 Catch That Cow
注意x等于0的时候就不要减一了,同样x*2大于10W也不行#include #include #include #include using namespace std;const int maxn=100010;bool vis[maxn];int x,k;struct state{ int x,t; state(int xx=0,int tt=0):x(xx),t(t原创 2013-04-05 16:45:37 · 462 阅读 · 0 评论 -
POJ 2251 Dungeon Master
三维的迷宫问题//2013年1月3日 11:08:23//author:zxj#include #include #include using namespace std;struct point{ int i,j,z; point(int ii=0,int jj=0,int zz=0):i(ii),j(jj),z(zz){}};int L,R,C;int tl,tr原创 2013-04-05 16:06:44 · 472 阅读 · 0 评论 -
POJ 3009 Curling 2.0
刚开始因为是广搜,果断超时超内存,其实是深搜回溯#include #include #include using namespace std;const int maxn=21;char maze[maxn][maxn];int di[]={-1,1,0,0},dj[]={0,0,-1,1},n,m,ans;void dfs(int ci,int cj,int cnt){原创 2013-04-05 14:21:56 · 512 阅读 · 0 评论 -
POJ 1426/ ZOJ 1530 Find The Multiple
直接用BFS打表了,STL的queue速度比较慢,198和99串比较长就手动了,蛋疼#include #include #include using namespace std;const int maxn=201;long long table[201];int n;void init(){ for (int i=1;i<maxn;++i) { if(i==198原创 2013-04-05 17:26:47 · 754 阅读 · 0 评论 -
蓝桥杯练习系统 PREV-4 剪格子
搜索题.几处剪枝的地方:1.当前和s大于总的和减去s,没有必要继续搜下去.2.当前使用的格子大于等于最优解,没有必要继续搜下去.下面的程序可能会剪成3部分,可是还是过了,不知为什么.#include #include #include using namespace std;const int MAX = 11;bool vis[MAX][MAX];int n, m原创 2014-03-17 15:53:16 · 507 阅读 · 0 评论