2012年1月28日
摘要: POJ_1059 由于题目说了最后掷骰子的次数不会超过1000,所以直接模拟掷骰子的过程即可。#include<stdio.h>#include<string.h>#define MAXN 1010#define MAXD 110#define MAXP 10int P, die[MAXN], g[MAXD], turn[MAXP], a[MAXP];void init(){ int i, j, k; for(i = 0; ; i ++) { scanf("%d", &k); if(!k) break; die[... 阅读全文
posted @ 2012-01-28 22:12 Staginner 阅读(393) 评论(0) 推荐(0) 编辑
摘要: POJ_3691 这个题目可以直接在生成的trie图的“安全部分”进行dp,用f[i][j]表示第i步走到第j个节点时,最少repair了几个基因。 具体的建立trie图的思想可以参考《Trie图的构建、活用与改进》这篇文章。#include<stdio.h>#include<string.h>#define MAXD 1010#define INF 0x3f3f3f3fchar gene[MAXD], b[30];int f[MAXD][MAXD], next[MAXD][4], flag[MAXD], N, e, P[MAXD], q[MAXD];void add( 阅读全文
posted @ 2012-01-28 20:13 Staginner 阅读(230) 评论(0) 推荐(0) 编辑
摘要: POJ_2778 如果做过POJ_1625的话,dp思路还是比较容易想到的,如果没做过的话可以参考一下《Trie图的构建、活用与改进》这篇文章的思想。 但遇到的一个问题是,对于如此巨大无比的n我们要怎么去优化呢?这个还是依赖于动态转移方程的形式。我们可以看出这个题目的动态转移方程一个确定的和式方程,即对于任意第i+1阶段的状态j,都可以表示成f[i+1][j]=a1*f[i][1]+a2*f[i][2]+...+ax*f[i][x],那么所有x个状态的转移方程就可以用一个大的矩阵的乘法表示出来,具体的构造方式如下图: 这样自然就可以用二分矩阵来加快运算了。 不过这个算法虽然能够AC,但... 阅读全文
posted @ 2012-01-28 00:20 Staginner 阅读(403) 评论(0) 推荐(0) 编辑