题目传送门

题意:

给你  的矩阵。第  行你可以选择以  为左上角,为右下角的子矩阵。

每行可以选择一次。

这  个子矩阵的并集的和就是答案。输出最大的答案。

数据范围:  。

题解:

这个应该能一下看出是  题。

 表示第  行选择以  为左上角,为右下角的子矩阵的最大值。

然后可以发现,转移状态时有两种情况:

(1)当前行选择的子矩阵与上一行选择的子矩阵相交。

 表示以  为左上角,为右下角的子矩阵的和。

 表示两个子矩阵的重叠部分,因为计算了两次,需要减去一次。

相交条件:

(2)当前行选择的子矩阵与上一行选择的子矩阵不相交。

 表示以  为左上角,为右下角的子矩阵的和。

不相交条件:

不相交的部分可以前缀最大值和后缀最大值优化一下,然后相交的部分暴力计算,因为  比较小。

时间复杂度:

感受:

其实这个题可做,但这个题比较靠后,在两个小时的比赛中,假如按照顺序写,必须手速飞快才能把这个题写完。

所以比赛时把这道题写出来还是挺难的。

代码:

#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 55 ;
const int maxm = 2e4 + 5 ;
int n , m , k ;
int a[maxn][maxm] ;
int dp[maxn][maxm] ;
int sum[maxn][maxm] ;
int c[maxn][maxm] ;
void init()
{for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= m ; j ++)c[i][j] = c[i][j - 1] + a[i][j] ;for(int i = 1 ; i <= n ; i ++){for(int j = 1 ; j <= k ; j ++)sum[i][1] += a[i][j] ;for(int j = 2 ; j + k - 1 <= m ; j ++)sum[i][j] = sum[i][j - 1] - a[i][j - 1] + a[i][j + k - 1] ;}for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j + k - 1 <= m ; j ++)sum[i][j] += sum[i + 1][j] ;
}
int d(int i , int x , int y)
{return c[i][y] - c[i][x - 1] ;
}
int cal(int i , int j)
{int l = max(1 , j - k + 1) , r = min(m , j + k - 1) ;int ans = 0 ;for(int p = l ; p <= r ; p ++){int x = max(p , j) ;int y = min(p + k - 1 , j + k - 1) ;int cost = dp[i - 1][p] + sum[i][j] - d(i , x , y) ;ans = max(ans , cost) ;}return ans ;
}
void solve()
{for(int j = 1 ; j + k - 1 <= m ; j ++)  dp[1][j] = sum[1][j] ;for(int i = 2 ; i <= n ; i ++){int pre = 0 ;for(int j = 1 ; j + k - 1 <= m ; j ++){if(j - k >= 1)  pre = max(pre , dp[i - 1][j - k]) ;if(j - k >= 1)  dp[i][j] = max(dp[i][j] , pre + sum[i][j]) ;dp[i][j] = max(dp[i][j] , cal(i , j)) ;}int suf = 0 ;for(int j = m - k + 1 ; j >= 1 ; j --){if(j + 2 * k - 1 <= m)  suf = max(suf , dp[i - 1][j + k]) ;if(j + 2 * k - 1 <= m)  dp[i][j] = max(dp[i][j] , suf + sum[i][j]) ;}}int ans = 0 ;for(int j = 1 ; j + k - 1 <= m ; j ++)  ans = max(ans , dp[n][j]) ;printf("%d\n" , ans) ;
}
int main()
{scanf("%d%d%d" , &n , &m , &k) ;for(int i = 1 ; i <= n ; i ++)for(int j = 1 ; j <= m ; j ++)scanf("%d" , &a[i][j]) ;init() ;solve() ;return 0 ;
}

codeforces1304F1 dp相关推荐

  1. dp,sp,px相互转化

    方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...

  2. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  3. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  5. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  6. [NOI2005]聪聪与可可(期望dp)

    题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...

  7. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

  8. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  9. 尼克的任务 dp 洛谷1280

    蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...

最新文章

  1. 服务器硬件电路设计书籍,家庭网关硬件接口电路设计大全——电路精选(3)...
  2. IDEA 打可执行jar包(maven项目)
  3. Maven Build Lifecycle
  4. 设计模式学习笔记(9)——代理模式
  5. 【存储知识学习】第六章-磁盘阵列-《大话存储》阅读笔记
  6. 数据库---主键约束
  7. java 接口 私有_Java 9:好的,坏的和私有的接口方法
  8. 操作目录下的文件或目录
  9. LeetCode 418. 屏幕可显示句子的数量(DP)*
  10. 在 远程桌面 权限不足无法控制 UAC 提示时,可使用 计划任务 绕开系统的 UAC 提示...
  11. LINUX UBUNTU安装依赖库编译freeswitch
  12. PLSQL设置字体大小
  13. C语言实现直接选择排序
  14. PR片头片尾模板 蝴蝶飞舞动态粒子爆炸效果logo展示pr视频模板
  15. 一文读懂什么是MRO采购
  16. Left-pad 分数 20作者 陈越单位 浙江大学
  17. 计算机词汇怎么背,如何背诵英语词汇更有效?
  18. android 投屏 app 三星,‎App Store 上的“爱缤投屏-用于三星智能电视”
  19. 数字图像处理与python实现-带通滤波器
  20. 音视频基础学习之【07.仿优酷界面的UI设计】

热门文章

  1. 【黄啊码】如何用小程序实现世界杯参赛队伍投票
  2. (idea配置-格式化html)
  3. 传智播客PHP笔记05-thinkphp框架-视图渲染、display,fetch,模板替换,模板变量的赋值与实现,系统变量,模板函数,模板运算符,foreach,if,比较标签,volist标签
  4. Wex5 文件下载并打开
  5. 无法进入BIOS:关闭快速启动;磁盘上有锁头:关闭设备加密
  6. 【100万用户量“排行榜列表”和“我的排名”功能优化记录】
  7. 王福强谈微服务:系统化考虑交付效率,掌握技术“手感”
  8. 使用CST 软件如何选配最佳的计算机硬件配置?
  9. 卖网红饮品喜茶配方,他一年赚50万
  10. python 桌面备忘录_Python数据科学备忘单