03 2014 档案

摘要:这道题虽然水水的,但是还是成功地给我增加了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 阅读(289) 评论(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 阅读(200) 评论(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 阅读(279) 评论(0) 推荐(0)