随笔分类 -  DP

hdu4758 Walk Through Squares 自动机+DP
摘要:题意:给n*m的地图,在地图的点上走,(n+1)*(m+1)个点,两种操作:往下走D和往右走R。现在要从左上角走到右下角,给定两个操作串,问包含这两个串的走法总共有多少种。做法:用这两个串构建自动机,然后只要在自动机上走n+m+1步就好了。就像一个递推,dp[x][y][i][cur]表示在i状态到达x,y坐标时走过的串的状态为cur时的总方案数我和我的小伙伴们都弱爆了。为什么没写过就不敢写。这几天看自动机应该也看会了吧。#define mod 1000000007int f[105][105][205][4] ;int hash[256];int n,m;struct ACmation { 阅读全文

posted @ 2013-09-21 20:45 oshixiaoxiliu 阅读(568) 评论(0) 推荐(0)

OUC_省赛备战赛_#5 _F题 poj3662
摘要:http://poj.org/problem?id=3662题意:求一条从1到n 的路径,其中可以选择k条路免费,问该路径中出去k条之后最大的边长度是多少。比赛的时候想到了一个正确的算法:二分答案+DP判定,但是写挫了一个地方,二分写反了好几遍,最后也没过,回来把二分改了就过了,dp[i][j]表示到达i点经过了j条大于L的路得到的最小的最大值。特判了一下无解和0的情况还有就是直接dp求解也是可以的,直接把状态表示成dp[i][j]表示到达i点使用了j条免费的路的到的最小的最大值code1,这个写的好挫,还是两个人各写了一部分[code lang="cpp"]bool sp 阅读全文

posted @ 2013-05-05 11:49 oshixiaoxiliu 阅读(301) 评论(0) 推荐(0)

hdu 3450 Counting Sequences
摘要:这个题的灵感来自与前几天做的一个题,思路想好之后,忽然发现自己好想会做这类题目了,不过还是要折腾老久,因为好多细节处理不好。 wa了好多好多次了,终于加了个mod就过了,尼玛。。。。。。 [code lang="cpp"] i64 query(int pos) { i64 sum = 0 ; while(pos > 0 ) { sum += f[pos] %mod; pos -= lowbit(pos); } return sum; } void update(int pos,i64 val) { while(pos <= nn) { f[pos] += val 阅读全文

posted @ 2013-04-04 00:12 oshixiaoxiliu 阅读(122) 评论(0) 推荐(0)

joj2443
摘要:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2443 我水啊 刚开始想到的方程f[n+1,m] = f[n,m] + f[n,m-1] + … + f[n,m-n]; 但是这个方程时间复杂度是O(N^3)。 然后仔细观察,发现f[n+1,m] = f[n,m]+f[n+1,m-1],并且减去f[n,m-n-1]; 复杂度是O(N^2) [code language="cpp"] void init() { memset(f,0,sizeof(f)); f[1][0] = 1; for(int i=1; i= 0) f[i+1] 阅读全文

posted @ 2013-03-10 21:13 oshixiaoxiliu 阅读(140) 评论(0) 推荐(0)

导航