摘要: 思路: 由于一个盒子在考虑放入另一个盒子之前,要考虑两个因素,宽和高,如果我们能够消除一个因素,就在一维的条件下考虑会简单些。怎么才能降低维数呢。因为只有w小于另一个时才能才能考虑是否能放,所以我们就把w从小到大排序,这样大体盒子的先后顺序就有了,我们在比较的时候就不需要考虑宽了,因为只有后边的盒子才能容纳前边的盒子,这时我们就可以用LIS了。先不考虑w和h相同的情况,排好序后,从第一个盒子开始遍历,第一个盒子不能容纳其他任何的盒子(宽最小)。然后第二个,看他能不能容纳第一个,只需考虑h满足要求与否。然后第三个,问题来了,它既能容纳第一个,又能容纳第二个,选择哪一个,贪心就在这,它能刚好容纳谁 阅读全文
posted @ 2011-11-21 22:12 wutaoKeen 阅读(413) 评论(0) 推荐(0)
摘要: 这题就是有一点要注意:要开一个三维数组来保存每个点的步数状态,因为那些障碍物会在第k的倍数消失,所以在该点来走过也是可以再走的,所以要开一个三维数组保存步数状态,以为每个时间段的步数是不同的。#include<stdio.h>#include<stdlib.h>#include<string.h>const int inf=0x7fffffff;struct T{ int x,y; int step; }q[100024];int hash[124][124][16],n,m,k,X,Y;int d[4][2]={0,1,1,0,0,-1,-1,0};cha 阅读全文
posted @ 2011-11-21 19:15 wutaoKeen 阅读(447) 评论(0) 推荐(0)