摘要: 思路: 依题意,一个物品可以用另一个物品加金币来代替,那么只要知道另一个物品的最低金币数即可,很容易想到记忆化搜索的思路 只需判断一下等级限制,枚举每条边,取最小值即可#include#include#include#include#include#include#include#include#include#include#include#include#define REP(i,l,r) for(int i=(l);i=(r);--i)#define CLR(a,v) memset(a,v,sizeof(a))#define sqr(x) ((x)*(x))#define SCAN(.. 阅读全文
posted @ 2013-07-23 09:51 parryworld 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 思路: DFS+回溯,单单这样会超时,需奇偶性剪枝,即|x2-x1|+|y2-y1|与步数的奇偶性相同,不相同直接输出"NO",相同再进行DFS 1 #include 2 #include 3 #include 4 #include 5 6 #define REP(i,l,r) for(int i=(l);i=(r);--i) 8 #define SCAN(n) scanf("%d",&n) 9 #define SCAN2(a,b) scanf("%d%d",&a,&b)10 #define SCANS(s) 阅读全文
posted @ 2013-07-12 09:54 parryworld 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 思路: 每加入一条线段,判断它与之前的线段是否相交,若相交,则合并两个集合#include#include#include#include#include#include#include#include#include#define REP(i,l,r) for(int i=(l);i=(r);--i)#define CLR(a,v) memset(a,v,sizeof(a))#define sqr(x) ((x)*(x))#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)max(s2.x1,s2.x2)||min(s1.y1, 阅读全文
posted @ 2013-07-08 21:21 parryworld 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 贪心思路: 先预处理出h[i][j]数组,表示(i,j)位置的点到最近的‘x’的距离 然后从上到下,从左到右遍历: 每一行取h[i][j]最小的点放置(对后面结果影响最小,同时vis[j]==0可放置),放置后vis[j]置1。 当遇到‘x'时,清零该位置vis[j]值,同时重新取之后的h[i][j]最小的点即可#include#include#include#include#include#include#include#include#include#define REP(i,l,r) for(int i=(l);i=(r);--i)#define CLR(a,v) memset( 阅读全文
posted @ 2013-07-07 14:11 parryworld 阅读(239) 评论(0) 推荐(0) 编辑