2013年6月26日

程设模拟考 G:拯救行动

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend/5G/解题思路:广搜守卫要走两步,需要特殊处理。我的处理方法是遇到守卫把,就在把这个点重新加入队列,下一次再取出,这样就保证了队列的优先性。也可以直接用优先队列。贴代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 struct Point 6 { 7 int x, y, time; 8 bool stay; 9 Point():stay(0){}10 };11 Point p, ne;12 int r, ... 阅读全文

posted @ 2013-06-26 14:55 白~ 阅读(233) 评论(0) 推荐(0) 编辑

2013年6月16日

程设模拟考 H:宠物小精灵之收服

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/H/解题思路:典型的01背包,不过是二维限制的最后要把V2扫一遍找伤血最少的情况贴代码: 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int N, V, V2, dp[1000][500]={0}, c1[100], c2[100]; 6 7 int main() 8 { 9 cin >> V >> V2 >> N;10 for(int i=1 阅读全文

posted @ 2013-06-16 15:56 白~ 阅读(511) 评论(0) 推荐(0) 编辑

程设模拟考 F:怪盗基德的滑翔翼

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/F/解题思路:简单题,求两次最大下降子序列贴代码: 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int h[110], a[110]; 6 7 int main() 8 { 9 int k, n;10 cin >> k;11 while(k--)12 {13 cin >> n;14 for(int i=1 ; i<=n ; i++)15 ... 阅读全文

posted @ 2013-06-16 15:54 白~ 阅读(184) 评论(0) 推荐(0) 编辑

程设模拟考 E:踩方格

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/E/解题思路:第一反应当然是模拟,但后来一想其实不用,每个节点只有两种情况:拓展出2个或3个节点,只需要记录下这两种节点的数目即可用a表示拓展3个节点的数目,用b表示总数,所以b-a即为拓展2个节点的数目,用s表示拓展出来的节点的数目,即:s=(b-a)*2+a*3=2*b+a,下一次b=s即可贴代码: 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n; 7 cin >> n; 8 i. 阅读全文

posted @ 2013-06-16 15:51 白~ 阅读(180) 评论(0) 推荐(0) 编辑

程设模拟考 D:硬币

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend/5D/解题思路:一看就是背包问题,但要求算必须使用的,第一反应时枚举去掉每一种物品,看看能不能拼出V,结果超时(必然的)正确思路是,当判断第i个物品是否必要时,只需判断前i-1种物品和后i+1至N种物品凑起来能否拼出V即可因此在这个思路下,我们首先要保存二维数组,便于提取中间结果,而且要注意使前i-1物品花费的空间+后面物品花费的空间和要为V贴代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int MAXN ... 阅读全文

posted @ 2013-06-16 15:42 白~ 阅读(210) 评论(0) 推荐(0) 编辑

程设模拟考 B:简单任务

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/B/解题思路:确实是简单任务贴代码: 1 #include <stdio.h> 2 3 int main() 4 { 5 int t, n, a[110]; 6 scanf("%d", &t); 7 while(t--) 8 { 9 scanf("%d", &n);10 for(int i=n ; i>=0 ; i--)11 scanf("%d", &a[i]);12 if(n == 0)13 ... 阅读全文

posted @ 2013-06-16 15:32 白~ 阅读(137) 评论(0) 推荐(0) 编辑

程设模拟考 A:石头剪刀布

摘要: 题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/A/解题思路用一个二维win数组表示双方出拳后的结果,1为A赢,-1为B赢,最后加到结果上贴代码: 1 #include <iostream> 2 using namespace std; 3 4 int win[3][3] = {0, 1, -1, -1, 0, 1, 1, -1, 0}; 5 int pa[101], pb[101]; 6 int main() 7 { 8 int k, n, na, nb; 9 cin >> k;10 while(k--)11 {1... 阅读全文

posted @ 2013-06-16 15:29 白~ 阅读(153) 评论(0) 推荐(0) 编辑

POJ 2251 Dungeon Master

摘要: 题目见此:http://poj.grids.cn/practice/2251/解题思路:一道BFS简单题,可以用来练手唯一值得说一下的就是31,32行处不要写成x=i, y=j, z=k,因为i、z表示层数,j、x表示行数,k、y表示列数贴代码: 1 #include <iostream> 2 #include <queue> 3 #include <string.h> 4 using namespace std; 5 6 bool b[32][32][32]; 7 int r, c, l; 8 int dx[6]={0, 0, 1, 0, 0, -1}, 阅读全文

posted @ 2013-06-16 15:22 白~ 阅读(128) 评论(0) 推荐(0) 编辑

POJ 4001 Catch That Cow

摘要: 题目见此:http://poj.grids.cn/practice/4001/(这里POJ指百练的OJ)解题思路:BFS练手题,RE了好几次……原因是28行处一直写成n>0,应该为n>=0首先要想到用一个数组来储存是否访问过,这点比较重要在判断是否插入队列时要做一些判断,这里我自己的判断感觉不是很严谨,不过总算过了,没有加剪枝贴代码: 1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 bool b[400002] = {0}; 5 6 int main() 7 { 8 queu 阅读全文

posted @ 2013-06-16 15:17 白~ 阅读(236) 评论(0) 推荐(0) 编辑

POJ 2559 Largest Rectangle in a Histogram

摘要: 题目见此:http://poj.grids.cn/practice/2559/多种解法,经典好题啊!解法一:解题思路:这题的基本思想是找出每一个矩形的左右边界(即左右边第一个比他高的),但如果直接对每一个矩形暴搜会超时。于是可以dp一下:如果它原有左边界的左边第一个,比他本身还要高,那么它原有左边界的左边第一个的左边界就是它的左边界。晕了吧~看代码:tmp = i; //先把左边界设为自己while(arr[i] <= arr[tmp-1] && tmp > 1) tmp = left[tmp-1]; 右边界同理还要注意一点,就是tmp > 1 这句一定不能缺 阅读全文

posted @ 2013-06-16 15:04 白~ 阅读(262) 评论(0) 推荐(0) 编辑

导航