题目描述
从前,小兔发现了一个神秘的花园。
花园是一个 n 行 m 列的矩阵,第 i 行 j 列的花的美丽度为 ai,j,一个合法的约会场所为任意一个正方形子矩阵,定义子矩阵的浪漫度为这个子矩阵的两条对角线上的花的美丽度之和。
现在小兔想选一个面积大等于 1 的约会场所使得场所的浪漫度最大,以便和小鹿约会,因为小兔忙着 AKIOI ,所以她把这个问题交给了你。
输入
第一行,两个正整数 n,m。
接下来是一个 n 行 m 列的矩阵,表示各个位置上花的美丽度。
输出
仅一行,一个正整数,表示最大的浪漫度。
样例输入 Copy
3 3 2 -1 3 -4 2 1 1 2 -1样例输出 Copy
7提示
对于 40%的数据,n,m≤10。
对于 100%的数据,1≤n,m≤300,∣ai∣≤104。
cpp#include <cstdio> #include <climits> int a[310][310]; long long sumz[310][310],sumf[310][310]; long long ans = LLONG_MIN; int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { scanf("%d", &a[i][j]); sumz[i][j] = sumz[i - 1][j - 1] + a[i][j]; sumf[i][j] = sumf[i - 1][j + 1] + a[i][j]; } } int b = m < n ? m : n, temp; for (int k = 1; k <= b; k++) { for (int i = 1; i <= n - k + 1; i++) { for (int j = 1; j <= m - k + 1; j++) { temp = sumz[i + k - 1][j + k - 1] - sumz[i - 1][j - 1] + sumf[i + k - 1][j] - sumf[i - 1][j + k]; if(k & 1) temp -= a[((i << 1) + k - 1) >> 1][((j << 1) + k - 1) >> 1]; if (temp > ans) ans = temp; } } } printf("%lld\n", ans); return 0; }
【C++ 二维前缀和】约会
CuberW2024-02-07 10:45
相关推荐
zander2582 小时前
114. 二叉树展开为链表乐观勇敢坚强的老彭2 小时前
信奥C++一维数组笔记码上有光2 小时前
异常和智能指针变量未定义~2 小时前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)这就是佬们吗2 小时前
Python入门⑤-异常处理、文件操作与实战项目王维同学3 小时前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位LONGZETECH3 小时前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析code_pgf3 小时前
C++ 工程架构设计规范自学小白菜3 小时前
关于提升机器学习算法做预测回归任务精度的方法分享C++ 老炮儿的技术栈3 小时前
基于MFC+原生GDI手动自绘仪表盘控件