上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 85 下一页
  2012年4月21日
摘要: ZOJ_3213 我是用最小表示法写的这个插头dp,相比于回路问题来讲,变简单的地方是不用考虑合并两个相同的连通分量这一情况了,变复杂的地方就是多出了两个个独立插头。 为了搞定独立插头的问题,我在编码的时候额外加了一个状态num,表示当前已经使用的独立插头的数目,这样只要保证num不超过2而且不合并相同的连通分量就能保证最后是一条简单路径。 在dp的时候因为多了独立插头,所以分的情况就更多一些。#include<stdio.h>#include<string.h>#define MAXD 15#define HASH 30007#define SIZE 1000010i 阅读全文
posted @ 2012-04-21 15:56 Staginner 阅读(347) 评论(0) 推荐(0) 编辑
摘要: FZU_1977 对于必须要走的点,那么在那个点就一定要有插头。而对于不必走的点,如果dp到该点时没有插头,那么既可以在这个点放两个插头开辟一个新的连通分量,也可以不放插头,相当于不经过这个点。 此外由于回头只能有一条,而形成回路的最后一个点又是不确定的,所以可以再额外记录一下当前是否已经形成了回路,这样如果已经形成了回路而后面又遇到了插头或者必须要走的点,那么这个方案自然就是不合法的。#include<stdio.h>#include<string.h>#define MAXD 15#define HASH 30007#define SIZE 500010int N, 阅读全文
posted @ 2012-04-21 00:19 Staginner 阅读(445) 评论(0) 推荐(0) 编辑
  2012年4月20日
摘要: HDU_3377 这个题目本质上还是一个回路的问题,为了方便处理,可以把初始状态看成只有左上角上方的位置有个下插头,同时把右下角下方的格子看成可以继续走的格子。 由于不一定每个格子都走,所以可以在递推到既没有上插头也没有下插头的格子时额外加一种情况——在这个格子不加任何插头(也就是说不会经过这个格子)。#include<stdio.h>#include<string.h>#define MAXD 15#define HASH 30007#define SIZE 1000010int N, M, maze[MAXD][MAXD], score[MAXD][MAXD], c 阅读全文
posted @ 2012-04-20 16:11 Staginner 阅读(281) 评论(0) 推荐(0) 编辑
摘要: HDU_1964 这个题目只需要把求回路数量的dp方程改写成取最优解的dp方程即可。 更多和插头dp相关的题目可以参考胡浩的博客:http://www.notonlysuccess.com/index.php/plug-dp-complete/。#include<stdio.h>#include<string.h>#define MAXD 15#define HASH 30007#define SIZE 1000010#define INF 0x3f3f3f3fint N, M, code[MAXD], ch[MAXD], maze[MAXD][MAXD], rcost 阅读全文
posted @ 2012-04-20 00:59 Staginner 阅读(322) 评论(0) 推荐(0) 编辑
  2012年4月19日
摘要: POJ_1739即便看上去这个题目不像一个回路问题,但由于规定了起点和中间,实际上我们只要把起点和终点连一条线,这个题目就算变成一个求回路的问题了,只不过这个回路有些特殊。具体处理的时候可以从下向上dp,然后把初始状态设置成在起点和终点的位置有两个相同的上插头即可。#include<stdio.h>#include<string.h>#define HASH 30007#define MAXD 15#define SIZE 1000010int N, M, maze[MAXD][MAXD], code[MAXD], ch[MAXD], ex, ey;char b[MAX 阅读全文
posted @ 2012-04-19 21:25 Staginner 阅读(379) 评论(0) 推荐(0) 编辑
  2012年4月18日
摘要: HDU_1639 这个题目可以用插头dp的思想去做,由于允许多条回路,那么就只需要用0、1记录每个位置是否有插头,然后逐渐生成合法的状态并记录方案种数。 更多和插头dp相关的题目可以参考胡浩的博客:http://www.notonlysuccess.com/index.php/plug-dp-complete/。#include<stdio.h>#include<string.h>#define HASH 10007#define STATE 1000010#define MAXD 15int N, M, code[MAXD], maze[MAXD][MAXD];str 阅读全文
posted @ 2012-04-18 23:54 Staginner 阅读(433) 评论(0) 推荐(0) 编辑
摘要: URAL_1519 插头dp的处女作终于完成啦^_^ 具体的思路还是参考陈丹琦的论文吧,我也只是处于学习和模仿的阶段。我是仿照胡浩博客用最小表示法敲的代码,更多和插头dp相关的内容可以参考胡浩的博客:http://www.notonlysuccess.com/index.php/plug-dp-complete/。#include<stdio.h>#include<string.h>#define MAXD 15#define HASH 30007#define SIZE 1000010int N, M, maze[MAXD][MAXD], code[MAXD], ch 阅读全文
posted @ 2012-04-18 21:12 Staginner 阅读(466) 评论(0) 推荐(0) 编辑
摘要: SPOJ_1043 今天顿时发现原来GSS系列一共有7道题,这个是其中的一道,只要在网址那改一下GGS*就可以找到其他的题目了。 这个题目可以用线段树去做,一个可行的思路就是计算出三个标记mc[](当前区间内最大的连续子串和),lc[](从当前区间左端点开始向右的最大的连续子串和),rc[](从当前区间右端点开始的向左的最大的连续子串和)。 查询的时候利用这三个标记进行计算就可以了。#include<stdio.h>#include<string.h>#define MAXD 50010int N, A[MAXD], mc[4 * MAXD], lc[4 * MAXD] 阅读全文
posted @ 2012-04-18 12:50 Staginner 阅读(798) 评论(0) 推荐(0) 编辑
  2012年4月17日
摘要: CF_46D 由于数据范围很小,实际上可以直接暴力的。但为了练练线段树合并区间的操作所以就用线段树写了。 更多和线段树合并区间有关的题目可以参考胡浩的博客:http://www.notonlysuccess.com/index.php/segment-tree-complete/。#include<stdio.h>#include<string.h>#define MAXD 100210#define MAXQ 110int N, L, B, F, lc[4 * MAXD], mc[4 * MAXD], rc[4 * MAXD], to[4 * MAXD];struct 阅读全文
posted @ 2012-04-17 18:02 Staginner 阅读(294) 评论(0) 推荐(0) 编辑
  2012年4月16日
摘要: CF_85D 这个题目可以用sum[cur][i]表示第cur个节点所辖区间的下标模5为i的整数之和,这样只要再加一个表示节点所辖区间的整数数目的标记num[cur],每次就可以方便的计算出sum[cur][i]的值了#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 100010struct Question{ char b[5]; int x;}question[MAXD];int N, num[4 * MAXD], tx[MAXD], X;long long int sum 阅读全文
posted @ 2012-04-16 22:49 Staginner 阅读(511) 评论(0) 推荐(0) 编辑
上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 85 下一页