摘要: rt~ 阅读全文
posted @ 2014-06-21 16:39 ACalvin 阅读(176) 评论(1) 推荐(0) 编辑
摘要: ---恢复内容开始---因为最近做比赛经常会出现数位DP,便尝试着去学学看数位DP。先给出两篇论文的链接:《数位计数问题解法研究》《浅谈数位类统计问题》然后也是寻找了很多大牛的博客,学习了很多(但是没学会囧。),现在先总结一下已经学到的东西“在信息学竞赛中,有这样一类问题:求给定区间中,满足给定条件... 阅读全文
posted @ 2014-05-29 21:45 ACalvin 阅读(3667) 评论(0) 推荐(3) 编辑
摘要: 动漫节一游回来之后一直处于一种意识模糊的状态看到大家都陆陆续续地过了C心里还是有点着急(自己没思路啊囧)其实当时就在想该如何找到DFS中的一个环,然后再找到环路上最小的一个值把所有环路上最小的值加起来就是结果,后来看到有人在群里说是tarjan求强连通分量,我就愉(bei)快(shang)地去睡觉了... 阅读全文
posted @ 2014-05-03 13:57 ACalvin 阅读(274) 评论(1) 推荐(0) 编辑
摘要: 这道题是CD老OJ上面的一道题,现在在新OJ上的题号是360,开始在VJ上做的提交一直RE(囧)。后来才知道OJ移位了。这道题是一个简单的成段更新+区间合并的线段树的题,1A还让我小激动了一下这道题的大概意思是有两种操作,一种是成段地增加一个值,另外一种是询问从l到r这段区间内的最长递增子序列首先先... 阅读全文
posted @ 2014-04-30 23:03 ACalvin 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 这道题虽然水水的,但是还是成功地给我增加了10多个WA。最开始拿着题,一看,依赖背包嘛~直接DFS树形DP嗨起来,甚至连内存都没有算一下,3MLE;然后又仔细看了一下题,没有必要用树形背包来做嘛,对每个背包01,就可以得到每个背包的泛化物品。结果又没有注意把它们泛化物品的和写成了完全背包(囧),WA个无限。做了很久才找到根源,结果又TLE了(再囧)。后来又想了想,其实在之前求01背包的时候,就和后面的泛化物品求和有许多重复的计算,因为单纯地泛化物品的和其实效率挺低的(n^2)可以知道,当背包容量比较大时,多次地求max(dp[0][j],dp[0][j-k]+dp[i][k])的无用计算非常之 阅读全文
posted @ 2014-03-16 20:24 ACalvin 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 第一个自己动手写的线段树,1Y还是有点小激动哈(虽然是模版题) 1 #include 2 #include 3 #include 4 using namespace std; 5 const int SIZE=200005; 6 const int INF=1000000; 7 int maxv[SIZE>1;16 build(l,mid,rt=r) return maxv[rt];23 int mid=(l+r)>>1;24 int ret=-INF;25 if(Lmid) ret=max(ret,findmax(L,R,mid+1,r,rt>1;32 ... 阅读全文
posted @ 2014-03-08 21:56 ACalvin 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 标准的DAG上的DP,其实之前一直不大想得明白为什么dp[i][j]为什么一定是在(i,j)状态上的局部最优解了呢?其实仔细想想和我一般所做的DP是一个道理,因为运用dfs的方法,因此可以确定的是,得到了dp[i][j]的值并且已经退出了(i,j)这个状态,就可以认为已经将(i,j)所有的后继的状态的最优解已经计算出了。而记忆化搜索就是可以看作剪枝的手段。其实这么一想貌似还没什么问题了。个人经验:对于递归的思考千万别想深了,而是应当运用类似于数学归纳法的东西,这么一想至少我目前所遇到的问题都可以迎刃而解了。#include#include#includeusing namespace std; 阅读全文
posted @ 2014-03-03 20:40 ACalvin 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 这道背包题和我们常见的背包题有所不同。如果根据以前做背包的惯性思维和题中数据的迷惑,会把概率乘以100来当作容量。但是经测试是不行的。我们不妨换种思路,看做DAG上的DP思想。将所有有可能达到的钱的最大“逃跑”概率算出来,最后再将能够达到的最大的钱输出。而能不能够达到这个可以将所有除0以外的值初始化为0.意为逃跑的概率为0。#include#include#includeusing namespace std;int main(){ //freopen("data.in","r",stdin); double dp[10005]; int sum,n,t 阅读全文
posted @ 2014-02-24 16:39 ACalvin 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 定义P-position和N-position,其中P代表Previous,N代表Next。直观的说,上一次move的人有必胜策略的局面是P- position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position 的局面是P-position。 阅读全文
posted @ 2014-02-23 21:32 ACalvin 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 今天碰到一道题,HDOJ 1059,因此便去学习了一下二进制的优化。为什么是二进制优化而不是三进制四进制优化呢?因为二进制中只包含0 1两个数,恰好可以代替背包状态中的放与不放。换句话说,是当该类物体被拆分了之后,可以表示可表示的所有的数,具体证明便不提了。对于多重背包,自然没什么好说的,是二进制优化的基础。而对于完全背包(即物品的个数有无限个),我们不妨将其看做v/c[i]件的多重背包,因为v/c[i]为其有效件数。下面贴代码:#include#include#includeusing namespace std;const int SIZE=60000;int dp[SIZE+5];int 阅读全文
posted @ 2014-02-23 20:07 ACalvin 阅读(1241) 评论(0) 推荐(0) 编辑