0629

来源:互联网 发布:北京大兴行知学校小学 编辑:程序博客网 时间:2024/06/05 19:36

DP第一天!虽然说迟到了,但还是跟得上节奏。上午讲的东西就是DP最基础的东西啦,首先是重温背包问题,回顾一下,01背包的方程是f[i][j] = max(f[i][j], f[i-1][j-w[i]] +p[i]),一般来讲i是种类j是空间f是价值。完全背包可以化为01,方程式f[i][j] = max(f[i][j], f[i-1][j-k*w[i]]+k*p[i]),这里k是数量,在装满或更少的条件下for一边即可。多重背包也可以化为01背包,但是为了时空上优化,可以将该种物体倍分:分为1*w[i],2*w[i],4*w[i],8*w[i]……然后是区间DP,分两段DP即可,方程是:f[i][j]= max(f[i][j], f[i][k] + f[k+1][j])DP最重要的就是方程,然后就是for的顺序。

下午的考试难度顺序不太对。先说第二题,纯DP。首先我找到它的方程:f[i][j] = (f[i][j], f[i-1][k] + s[i][j]) (范围:abs(j-k)<=r[i-1][k]),这个地方千万要注意,由于是从上往下跳,r所取的点是前一个点。但是如果我们从下往上DP,由于跳的方向仍然是上到下,范围的r可写为r[i][j]。第三题DP做方程具体不太好写,但是向下除划分即可。如果暴力拆分,由于运行速度快,仍然是满分(至于为什么DP不能AC真是迷)。由于数据的特殊性以及没有subtask,依赖打表1-10、判断直接输入和无脑Impossible可以A30分!

再说第一题,我用搜索的方式从后往前回传答案运算,通过了70%task(毕竟70%task小于1000)。但是通过一系列DP优化可以大幅降低速度。由于我数据设的不大,可能后30%仅仅是溢出了。

段晓桤dogther大神讲图论了,林老出资送给他一个硬盘,我们也每人给他写了留言

图:成绩

我自从上次两道爆0,名字蓝的吓人…………