Climber.pI的OI之路

Through the darkest dark,may we see the light.

Problem List (5.7)

5.7
p1004 滑雪[2d最长下降子序列]
无思路.

p1005 采药[简单01背包], 调了1.5h
[spec,1d] f[j] = max{f[j], f[j - c[i]] + w[i]}, 能够有效避免f[i][j]中i的指代问题
*2d写法须注意f[i][j] = f[i-1][j]的值传递
 for (i = 1; i <= n; i++)
  for (j = T; j >= 1; j--)
   if (j >= t[i])
    f[i][j] = max(f[i - 1][j], f[i - 1][j - t[i]] + w[i]);
   else f[i][j] = f[i - 1][j];

p1003 找啊找啊找GF[加强版01背包], 调了1h
读题分析后发现是0/1背包模型, 时间需要单独处理.(一开始认为要记录路径, 其实不用这么麻烦)
f[m][r] = max{f[m][r], f[m - rmb[i]][r - rp[i]] + 1}
t[m][r] = max{t[m][r], f[m - rmb[i]][r - rp[i]] + time[i]}, 如果f[m]..和f[m-rmb[i]]..相等,注意更新t[m][r]
[补]写rocker的时候想到一种方法,对于dp,维度往往是需要表示的量数-1,所以关于方程状态的表示可以从时间复杂度、空间复杂度、需要表示的量数综合考虑.此题中加上time的话,显然爆时间,然后从这个方向思考方程.

p1015 公路乘车[线性dp]
f[i] = max{f[i - k] + A[k]} (1 <= k <= 10)

p1011 传纸条[双线程dp + 时间降维]
注意读题, 题目中的来回等价为两次同时的单向过程
f[x1][y1][x2][y2] = max{f[x1-1][y1][x2-1][y2], f[x1-1][y1][x2][y2-1], f[x1][y1-1][x2][y2-1], f[x1][y1-1][x2-1][y2]}+A[x1][y1]+A[x2][y2]
注意每个数if and only if取一次, f[x1][y1][x2][y2] -= A[x1][y1](x1=x2&&y1=y2)

p1014 乘法游戏[区间dp]
无思路

posted on 2011-05-07 20:26 Climber.pI 阅读(216) 评论(0)  编辑 收藏 引用 所属分类: 动态规划


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理