lightoj 1071 DP/网络流

50 篇文章 0 订阅
23 篇文章 0 订阅

如果在赛场上告诉我,这道题就是暴力的记忆化搜索,我肯定就搞了

如果在赛场上告诉我,线段树lazy标记是可以过的,我肯定现场就学了就过了

哎,还是实力不够,校赛给我了一发补题的机会也挺好的


题意:n*m的矩阵,每个点上有权值,一个人从左上角到右下角遍历两次,若两条路径有重复点,则只计算一次,求最大的收益,n和m的最大范围100


看到这种题,我知道是DP

正常情况的设置是:dp【i】【j】【k】【l】为第一个人走到了【i】【j】这个点,第二个走到【k】【l】,所能够得到的最大价值

但是范围在100,这样开数组是爆炸的,能不能少一维


注意到题意:只能从左上角走到右下角,意味着总步数是固定的:n+m-2

所以可以用总步数和两个人在x方向的步数,来计算y方向的步数从而减少一维变量

即定义为:dp【step】【x1】【x2】为当前总共走了step步,第一个人的坐标是【x1】【step-x1】,第二个人的坐标是【x2】【step-x2】所能得到的最大价值


因此,剩下的方向:怎么得到最大价值:记忆化搜索

两个人最多四种方向,依次判断就好:AB下;AB右;A下B右;A右B下


剩下的代码就好写了,初始化为-1,然后dfs记忆化搜索,只需要判断4种方向能不能走(有没有点在边界上判断一发即可)

还是太弱,贴上我谷巨的博客压压惊

膜拜我谷


另外呢,这个题如果把2次,改成3次,甚至更多的K次,用dp就不方便了

就需要用最小费用最大流模板处理最大费用最大流问题,暂时还不会,留个坑在这吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值