黑格覆盖
时间限制: 1 Sec 内存限制: 128 MB
题目描述
在一张由 M*N 个小正方形格子组成的矩形纸张上,有 k 个格子被涂成了黑色。给你一 张由 m*n 个同样小正方形组成的矩形卡片,请问该卡片最多能一次性覆盖多少个黑格子?
输入
输入共 k+1 行:
第 1 行:为 5 个整数 M、N、m、n、k,其含义如题目所述。
接下来 k 行:每行 2 个整数,分别表示被涂成黑色的格子的行、列坐标。
输出
输出共 1 行,1 个整数,表示卡片一次性最多能覆盖的黑格子数。
样例输入
3 5 2 2 3
1 1
2 2
3 5
样例输出
2
一道C++题目,求正确代码!!!!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2020-08-01 13:08关注
#include<bits/stdc++.h> using namespace std; int A[1010][1010]; int main() { int M,N,m,n,k; scanf("%d %d %d %d %d",&M,&N,&m,&n,&k); for(int i=1;i<=k;i++) { int a,b; scanf("%d %d",&a,&b); A[a][b]=1; } for(int i=1;i<=M;i++) { for(int j=1;j<=N;j++) A[i][j]=A[i][j-1]+A[i-1][j]-A[i-1][j-1]+A[i][j]; } int maxn=0; if(m>M) m=M; if(n>N) n=N; for(int i=M;i>=m;i--) { for(int j=N;j>=n;j--) { int num=A[i][j]+A[i-m][j-n]-A[i-m][j]-A[i][j-n]; maxn=max(maxn,num); } } if(m>N) m=N; if(n>M) n=M; for(int i=M;i>=n;i--) { for(int j=N;j>=m;j--) { int num=A[i][j]+A[i-n][j-m]-A[i-n][j]-A[i][j-m]; maxn=max(maxn,num); } } printf("%d",maxn); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?
- ¥15 c++头文件不能识别CDialog