摘要: 三维的BFS简单搜索,TLE了2次,边界问题少了dz的情况,还有注意简单的剪枝,像p.step>=time的情况就得剪去。学会发散思维,学了二维BFS就要想到三维的又该怎么去写。 1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 using namespace std; 5 6 int map[51][51][51]; 7 int m[51][51][51]; 8 int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0 阅读全文
posted @ 2012-02-18 20:46 hankers 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 此题大意讲的是从起点到终点,要求若从A到B,则需保证A到终点的时间比B到终点时间要长。由于有此要求,必然想到动态规划记录其最短路线的状态,但传统动态规划却解决不了。故采用记忆化搜索,记忆化搜索=搜索形式+动态规划思想 1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 int map[51][51],m[51][51]; 6 __int64 s[51][51]; 7 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1 阅读全文
posted @ 2012-02-18 16:33 hankers 阅读(995) 评论(0) 推荐(0) 编辑
摘要: 此题大意讲的是有n种类型不同的砖块(a,b,c),且每种类型的砖块可以有无限个,垒高但要保证上面砖块的长宽小于下面砖块的长宽,求其最大高度。由于不确定a,b,c哪个为高,故扩展为3×n个砖块,若将砖块的长排序,只需比较宽。接下来就有点像背包了,从后往前一一确定当前状态下的最大高度。 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 struct block 6 { 7 int x,y,z; 8 }b[100]; 9 10 int max(int a,int b)11 {1 阅读全文
posted @ 2012-02-18 10:40 hankers 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 此题大意讲的是只能走黑砖,求他所能走的黑砖个数。这题让我很郁闷,写完了结果各种不对,最后才调试出原来我把行列的数搞反了,千万要细心!还有p=que.front();que.pop();这段代码只能放在循环内的前面,如若置于后面则还没有搜索完全就很容易跳出。 1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 using namespace std; 5 6 char map[21][21]; 7 int m[21][21]; 8 int dir[4][2]={{1,0},{-1,0},{0 阅读全文
posted @ 2012-02-18 10:30 hankers 阅读(266) 评论(0) 推荐(0) 编辑