狗哥采矿 - 洛谷

所谓棋盘dp就是dp[i][j]代表了(1,1)到(i,j)范围内的收益,在矩阵前缀时,利用了一些容斥原理达到状态转移的目的。本题为了维护矩阵形状,考虑到每个点其实只能一直向上或者一直向下,只需要dp[i-1][j]加上左边前缀和与dp[i][j-1]加上上部前缀和即可。

唯一让我疑惑的是,本次i,j的连接方式和其内部的1连接方式根本不同时,为什么不会产生影响呢?

宏观来说,我们向左插入直线时,选择的是上部的矩形,我们向上插入时,选择的是左部的,直线与被选择的矩形根本不想交,所以直线与矩形根本不会互相影响。而我们dp[i-1][j]与d[i][j-1]的状态内部已经安排好了没有冲突的最优情况。我们此时加入一条左或上的边,也是合理的,那么dp[i][j]就合理了,其他更大的矩形就可以利用这一合理性,构建更大的合理。

微观来说,见图。

首先看边界,最上面一定全部向左时,dp[1][j]才能最大值,最左侧全部向上时dp[i][1]才能取最大值。由于(1,1)左右答案都相同,所以这还不能充分说明问题。

到达(1,2)时,两种扩展方式,向上时,dp[i][j-1]内部不会影响本次操作。但本次方向显然和上方(1,2)位置方向发生冲突,但暂时还没有影响后续结果,我们继续推,假设本次是向上推最优。

(2,3)位置,向右推时,dp[2][2]并不会影响本次操作,而且我们这样也把(1,3)改成了向上,不会存在断层情况。那如果本次向左扩展最优呢,那么我们又得把左边全部染成黄色,dp[1][3]派上了用场,dp[1][3]在到达(2,2)点时被“修改”了部分方向,可我们调用时,它仍然保持这它内部最优的情况,而这种情况是连续无断层的。

#include <iostream>
# include<algorithm>
# include<cstring>using namespace std;
typedef long long int ll;int dp[550][550];
int bei[550][550];
int xi[550][550];
int main()
{int n,m;while(cin>>n>>m&&n&&m){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x;cin>>x;xi[i][j]=xi[i][j-1]+x;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x;cin>>x;bei[i][j]=bei[i-1][j]+x;}}memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dp[i][j]=max(dp[i-1][j]+xi[i][j],dp[i][j-1]+bei[i][j]);}}cout<<dp[n][m]<<'\n';}return 0;
}

以此类推,发现即使出现了内部冲突的情况,也不会对本次造成任何影响。

P2380 狗哥采矿【普及+提高】棋盘DP相关推荐

  1. P2380 狗哥采矿 (二维dp)

    原题链接:狗哥采矿 - 洛谷 思路:我一开始想的是,一个点往左走还是往上走与 它上面和左边的点走的方向有关系,但是感觉复杂交错.....然后看到了大佬的二维dp,其实Aij往左走,就让它左边的这一条都 ...

  2. 洛谷P2380 狗哥采矿

    P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...

  3. 洛谷P2380 狗哥采矿【DP】【绿】

    Date:2022.03.25 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少.最北边有bloggium的收集站,最西边有 ye ...

  4. 洛谷——P1548 [NOIP1997 普及组] 棋盘问题

    P1548 [NOIP1997 普及组] 棋盘问题 题目描述 设有一个N \times MN×M方格的棋盘(1≤N≤100,1≤M≤100)(1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个 ...

  5. 狗哥历经四个小时整理大佬的内容,你确定不来看一下?

    今天狗哥兴奋了 因为狗哥找到了测试界的几个权威 不信? 咱有图为证! 狗哥翻了一下这个公众号 满满的福利啊 找工作 就来看他 薪资高,岗位好 如果不满意 加狗哥微信 狗哥给你讨个说法! 测试帮日记(t ...

  6. [DFS] P1236 算24点 ( 普及+/提高

    Date:2019/10/25 Degree of difficulty: ( 普及+/提高 Original question:P1236 算24点 →Happy−begining\to Happy ...

  7. 【Acwing提高】DP·背包

    推荐:炒鸡棒的适合萌新的DP题单(大概?) [Acwing提高]DP·背包 文章目录 [Acwing提高]DP·背包 知识点 题目 采药 装箱问题 宠物小精灵之收服 数字组合 买书 货币系统1021 ...

  8. 狗哥和度娘的差距,就是一次点击

    能否穿越古今,及时搜索. LOOK,狗哥已抵达,度娘仍然在路上.ON THE ROAD..

  9. ctfshow 网络迷踪-狗哥去哪

    7 狗哥去哪 右下角是微博名字 找到对应的微博 但评论好像没有找到,于是去bilibili看了看 找到是在稻城亚丁 ctfshow{daochengyading}

  10. [NOIP2017 普及组] 棋盘

    [NOIP2017 普及组] 棋盘 题目背景 NOIP2017 普及组 T3 题目描述 有一个m×mm \times mm×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的 ...

最新文章

  1. PHP的strlen与mb_strlen
  2. 理解并实施:VRRP(200-120新增考点)
  3. 多线程编程(三)--创建线程之Thread VS Runnable
  4. 蒸妙集团用科学熏蒸法,弥补现代人在运动上的缺乏
  5. growup怎么读_growup..是什么意思
  6. dorado 7 使用总结
  7. 软件测试工程师工作必备模板五件套
  8. Python 内置函数详解
  9. Ubuntu老是提示系统内存空间不足---扩展内存方法
  10. win7系统64位下安装sql server2000时提示兼容性问题
  11. 设置/etc/fstab实现自动挂载
  12. 美团App页面视图可测性改造实践
  13. 初探深度优化搜索--小白版
  14. 嵌入式软件工程师—成长笔记#03
  15. 什么是AT指令,AT指令是什么
  16. 使IE浏览器支持webp格式图片显示
  17. markdown逻辑符号
  18. win10 uwp 使用 Microsoft.Graph 发送邮件
  19. java调用bat脚本实现pppoe拨号_pppoe客户端自动拨号原理及实现
  20. 社会排斥范式:通过Cyberball游戏来探索其中的机制

热门文章

  1. 如何设置WiFi密码才不会被WiFi万能钥匙破解
  2. Java、显示每月第一天是星期几
  3. uC/OS II移植
  4. sin40度不用计算机怎么求,sin40度怎么算 sin40度如何算
  5. Latex 操作(3) beamer(PPT)
  6. 如何删除github上的文件夹(抖机灵方法)
  7. 最全自动驾驶数据集分享系列一|目标检测数据集(1/3)
  8. 【笔记】【数字逻辑】可能是最详细的二进制、八进制、十进制、十六进制进制转换笔记
  9. protected使用总结
  10. SAPnbsp;BORnbsp;--nbsp;…