随笔分类 -  [合集] 2012暑假集训

上一页 1 2

[字典树入门] HDOJ 1251 统计难题
摘要:不需要保存是否结束(isend),在插入时每经过一个节点,将该节点的计数器 +1,在查找时输出最后一个字符所在节点的cnt值即可;PS:为什么加了删除树(del_Trie)会超时呢?# include <cstdio># include <cstring># define LEN 10 + 1struct node{ int cnt; node * next[26]; node () { cnt = 0; memset(next, 0, sizeof(next)); }};void insert_Trie(node *root, cha... 阅读全文

posted @ 2012-08-05 19:01 getgoing 阅读(225) 评论(0) 推荐(0)

[状态压缩DP] PKU 2411 Mondriaan's Dream
摘要:参考http://wenku.baidu.com/view/e262a86f1eb91a37f1115c26.html状态设计:0表示横放,1表示竖放,可以预处理出所有合法状态,f[i, s] 表示到达第 i 层的状态(类似俄罗斯方块,前 i 层合并之后剩余的状态)。状态转移:f[i, s] = sum{f[i-1, s']},s' 为和 s 符合的状态 j 与 s 的异或值。# include <cstdio># include <cstring># define N 11 + 1typedef long long int LL;int m, n;LL 阅读全文

posted @ 2012-08-05 17:25 getgoing 阅读(249) 评论(0) 推荐(0)

[状态压缩DP] COJ 1129 送货到家
摘要:第一道状态压缩DP;这道题要求一个无向图的最小权回路,要求经过所有点,所以可以任选一个点(这里选0)作为起点,以后的状态f[s, i]表示从0出发到i结束的最小权路径,最终求得f[1<<n-1, k]后要加上w[0, k],然后求最小值:for k = 0:n-1 ans = min(f[1<<n-1, k]+w[0, k]);print(ans); 1 # include <cstdio> 2 # include <cstring> 3 4 # define N 15 5 # define INF 0X1FFFFFFF 6 7 int n; 8 阅读全文

posted @ 2012-08-05 09:21 getgoing 阅读(173) 评论(0) 推荐(0)

[集合DP] UVA 10651 Pebble Solitaire
摘要:根据题目描述,每次变换都减少了一个石子,所以只要求出初始状态最多可以变换多少次,用初始状态石子数目减去这个变换次数就得到最后剩余最少的石子的数目;最多有12位,用一个 int 表示状态,状态的转移可以用位运算实现。 1 /* 2 UVA 10651 - Pebble Solitaire 3 */ 4 # include <cstdio> 5 # include <cstring> 6 7 char s[20]; 8 int f[5000]; 9 10 bool move(int &x, int i, char d)11 {12 int t = (x>> 阅读全文

posted @ 2012-08-03 17:01 getgoing 阅读(335) 评论(0) 推荐(0)

[简单DP] UVA 10051 Tower of Cubes
摘要:DAG上的DP,六个方向,打印不要求字典序,相反方向可以通过异或得到(定义0-5代表题目所说的五个方向);f[i, p] = 1;for (k = 1:i-1) f[i, p] = max(f[i, p], f[k, q]+1) if (color[i][p^1] == color[k][q]) 1 /* 2 UVA 10051 - Tower of Cubes 3 */ 4 # include <cstdio> 5 # include <cstring> 6 7 # define N 500 + 5 8 # define F 6 9 10 const char s[F 阅读全文

posted @ 2012-08-03 16:03 getgoing 阅读(260) 评论(0) 推荐(0)

[单调队列] UVA 10534 Wavio Sequence
摘要:单调队列,Staginner的分析;关键在于正确性和最优性的证明:正确性:通过单调队列的维护,不会得到比实际最长串更大的长度;最优性:通过单调队列的维护,能得到不小于最长串的长度; 实际存在的最长串在出现之后,单调队列的长度不会小于这个最长串的长度(替换不改变长度,只有进队时增加了长度),而之前出现的较大的队列尾会被替换,较小的会被较大的通过入队的方式更新。 1 /* 2 UVA 10534 - Wavio Sequence 3 */ 4 # include <cstring> 5 # include <cstdio> 6 7 # define N 10000 + 5 阅读全文

posted @ 2012-08-03 15:13 getgoing 阅读(304) 评论(0) 推荐(0)

[简单DP] POJ 1651 Multiplication Puzzle
摘要:一看就知道是矩阵链,但是忘了矩阵链具体是怎么做的了,记的是把区间划分开来DP。定义f[i, j]为 i-j 内的最小值(初始是1-n),如果第 k 个为最后选的数,那么 f[i, j] = f[i, k]+f[k,j]+a[i]*a[k]*a[j];需要注意的是边界条件:如果区间内不含选取的数(i+1==j)最小值应该定义为0。 1 /* 2 POJ 1651 Multiplication Puzzle 3 */ 4 5 # include <cstdio> 6 # include <cstring> 7 8 # define N 100 + 5 9 # define 阅读全文

posted @ 2012-08-03 10:26 getgoing 阅读(239) 评论(0) 推荐(0)

[简单DP] POJ 2192 Zipper
摘要:给出三个串a b c,问 c 是否能由 a b 串中的字符通过混合得到,要保持同一个串中两个字符的前后关系不变。状态:f[i ,j] 表示长度为 i 且使用了b串 j 个字符(使用 a 串 i-j 个字符),布尔型,表示状态是否可达。状态转移: f[i, j] = f[i-1, j] && f[i-1, j-1],对于边界f[0, 0] = true。也可以令 f[i, j] 为使用了 a 串 i 个字符、b 串j个字符是否可达,如下: 1 /* 2 POJ 2192 Zipper 3 */ 4 # include <cstdio> 5 # include < 阅读全文

posted @ 2012-08-03 09:46 getgoing 阅读(209) 评论(0) 推荐(0)

上一页 1 2

导航