上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 1 #include <iostream> 2 #include <cstdio> 3 char map[21][21]; 4 int H, W, starti, startj, num; //H行 W列 5 int dir[4][2] = {{-1,0}, {0,1}, {1,0}, {0,-1}}; 6 void dfs(int x, int y) 7 { 8 ++num; 9 for (int i = 0; i < 4; ++i)10 {11 int fx = x + dir[i][0];12 ... 阅读全文
posted @ 2013-04-06 12:46 PegasusWang 阅读(340) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1010剪枝:1能走的地板数小于所给时间,肯定走不过。2狗达到门的时间和所给时间同奇偶性。奇偶剪枝:http://blog.csdn.net/chyshnu/article/details/6171758可以把map看成这样:n0 1 0 1 0 1n1 0 1 0 1 0n0 1 0 1 0 1n1 0 1 0 1 0n0 1 0 1 0 1n从为0的格子走一步,必然走向为1的格子n从为1的格子走一步,必然走向为0的格子n即:n0 ->1或1->0必然是奇数步0->0走1->1必然是偶 阅读全文
posted @ 2013-04-05 18:24 PegasusWang 阅读(299) 评论(0) 推荐(0)
摘要: 原文链接http://blog.csdn.net/chyshnu/article/details/6171758什么是奇偶剪枝?把矩阵看成如下形式:0 1 0 1 0 11 0 1 0 1 00 1 0 1 0 11 0 1 0 1 00 1 0 1 0 1从为 0 的格子走一步,必然走向为 1 的格子 。从为 1 的格子走一步,必然走向为 0 的格子 。即:从 0 走向 1 必然是奇数步,从 0 走向 0 必然是偶数步。所以当遇到从 0 走向 0 但是要求时间是奇数的或者 从 1 走向 0 但是要求时间是偶数的,都可以直接判断不可达!比如有一地图:[c-sharp]view plaincop 阅读全文
posted @ 2013-04-05 17:52 PegasusWang 阅读(471) 评论(0) 推荐(0)
摘要: 1 #include <iostream> 2 #include <cstdio> 3 char map[101][101]; 4 int m, n; 5 int dir[8][2] = {{-1,1},{0,1},{1,1},{-1,0},{1,0},{-1,-1},{0,-1},{1,-1}}; //八个方向 6 void dfs(int x, int y) 7 { 8 for (int i = 0; i < 8; ++i) 9 {10 int fx = x + dir[i][0];11 int fy = y + dir[i][1];12... 阅读全文
posted @ 2013-04-05 14:00 PegasusWang 阅读(390) 评论(0) 推荐(0)
摘要: 非常蛋疼的水题,基本上就是在考英文理解能力,题意灰常不好懂,看了讨论居然有英语国家的人也没理解题意,看来也不完全是本人英语理解能力不好。搬上来翻译(来自刘树嘉):冬天了一群小朋友在玩滑雪射击比赛。他们任意两个人出发的时间相差30秒。每个小朋友的到达时间与出发时间之差称为这位小朋友的比赛成绩。小朋友到达瞬间的比赛成绩比之前其他完成比赛的小朋友的比赛成绩都要好(时间短),则称该小朋友暂时领先。现在给出n位小朋友以及每位小朋友的名字和到达时间,要求输出所有暂时领先的小朋友的名字。数据保证任意两位小朋友的到达时间和比赛成绩都不同。输入第一行包括一个整数n(1 ≤ n ≤ 100),表示参赛小朋友的总数 阅读全文
posted @ 2013-03-30 23:39 PegasusWang 阅读(446) 评论(0) 推荐(0)
摘要: 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <stack> 5 using namespace std; 6 int main() 7 { 8 string s; 9 while (getline(cin, s) && s != "0")10 {11 stack<double> ds;12 stack<char> cs;13 double t, t1, t2;14 char c;15 s 阅读全文
posted @ 2013-03-30 11:50 PegasusWang 阅读(242) 评论(0) 推荐(0)
摘要: 一开始用sort+binary_search,结果还是超时了,后来看到用lower_bound做。首先用map< int, vector<int> >,对每一个出现的数字用vector<int>记录出现位置,最后查找时如果位置不在vector里说明没有,若有相交的区间,说明有这个数。iterator lower_bound(beg, end, val):返回一个迭代器,它引用[beg, end)范围最低的位置,要求[beg, end)按照升序排列,此时插入val不会破坏该顺序。,如果val大于所有元素,返回end。 1 #include <iostre 阅读全文
posted @ 2013-03-29 22:09 PegasusWang 阅读(466) 评论(0) 推荐(0)
摘要: 标记现在已经匹配到o1的第几列车了,o2从头开始,如果不匹配把o1就放入栈中,匹配后出栈并比较栈顶与o1的下一辆,匹配继续出,不匹配就继续进栈 1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <stack> 5 using namespace std; 6 int main() 7 { 8 int n; 9 while (scanf("%d", &n) != EOF)10 {11 string o1, o2;12 cin 阅读全文
posted @ 2013-03-27 09:36 PegasusWang 阅读(297) 评论(0) 推荐(0)
摘要: 题意:输入首行为N,M (0 < N,M <= 1000)表示东西、南北的格子数,每格100米。Nikanor从格子(1,1)的西南角的家出发,地铁站位于格子(N,M)的东北角。第二行为K(0 <= K <= 100),表示有k个格子允许对角线穿越。以下K行为允许对角线穿越的格子,分别用一对数表示,空格隔开。求Nikanor的家到地铁站的最短路径,四舍五入到整数米。用动态规划:设f[i][j]是出发点到点a[i][j]的最短路径f[i][j] = min(f[i-1][j], f[i][j-1]) + 100 //不能从a[i-1][j-1]到a[i][j]f[i][j 阅读全文
posted @ 2013-03-25 12:00 PegasusWang 阅读(748) 评论(0) 推荐(0)
摘要: 利用在数组长度N很大的情况下能达到压缩存储的作用。一般还是用在DP题目中,因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是解集中的最后几个解,所以以滚动数组形式能大大减少内存开支。用法:#include <iostream>using namespace std;int d[3];int main(){ d[0] = 1;d[1] = 1; for( int i = 2; i < 100; i++) d[i % 3] = d[(i - 1) % 3] + d[(i - 2] % 3]; cout << d[99 % 3] <&l 阅读全文
posted @ 2013-03-25 11:29 PegasusWang 阅读(262) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页