【DP】ssl 2315.打砖块
发布日期:2021-05-07 22:48:03 浏览次数:22 分类:精选文章

本文共 842 字,大约阅读时间需要 2 分钟。

题目描述

KXT是一个很无聊的小朋友,一天到晚都在打坐…

  一天,被他发现了一个比打坐更无聊的事情——打砖块。很多块砖分布在一个mm的矩阵中,他可以消掉以他为左上角顶点的一个nn的矩阵里的所有砖块。
  喜欢偷懒的他请来了你帮他计算可以消掉最多的砖块数(只能消一次)。

>Input

第一行:用空格隔开的三个整数n、m、k。

  接下来k行,每行2个用空格隔开的整数Xi、Yi,表示第i块砖在Xi行、Yi列的位置。

>Output

为可以消掉最多的砖块数。

>Sample Input

5 10 112 14 64 93 99 79 97 98 108 88 610 2

>Sample Output

6

【样例解释】

站在第4行、6列的位置,可以消除6个方块。

  

【数据范围】

n<=m; k<=m*m

60%:n<=70; m<=70; k<=4900
100%:n<=1000; m<=1000; k<=1000000;

思路

吐槽:啊啊啊好容易超时啊啊啊

DP,由最大子矩阵之和改过来的

代码

#include
int n,m,s,ans,k,a[1001][1001]={0};int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++){ scanf("%d%d",&s,&ans); a[s][ans]=1; } for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) a[i][j]+=a[i][j-1]; ans=0; for(int i=n;i<=m;i++) for(int j=n;j<=m;j++){ s=0; for(k=i-n+1;k<=i;k++) s+=a[k][j]-a[k][j-n]; if(s>ans) ans=s; } printf("%d",ans); return 0;}
上一篇:【DP】糖果盒
下一篇:【DP】ssl 1205.最大子矩阵之和

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月15日 18时30分13秒