约会
题目描述
从前,小兔发现了一个神秘的花园。
花园是一个 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。
思路
如果直接暴力能过的话,你我此时此刻也不会在此见面
不过也跟暴力没什么区别,维护对角线的前缀和
用B数组维护主对角线的前缀和,用C数组维护副对角线的前缀和
然后枚举左上角的点和正方形的边长
然后O(1) 获得 浪漫度,
最后取max
代码
#include <map> #include <set> #include <cmath> #include <stack> #include <queue> #include <cstdio> #include <bitset> #include <vector> #include <iomanip> #include <sstream> #include <cstring> #include <iostream> #include <algorithm> #include <unordered_map> #define UpMing main #define re register #pragma GCC optimize(2) #define Accept return 0; #define lowbit(x) ((x)&(-(x))) #define mst(x, a) memset(x,a,sizeof(x)) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define dep(i,a,b) for(int i=(a);i>=(b);--i) using namespace std; typedef long long ll; typedef pair<int,int> PII; typedef unsigned long long ull; const int inf =0x3f3f3f3f; const int maxn=2e6+7; const ll mod = 998244353; const int N =1e6+7; inline ll read() {ll x=0;bool f=0;char ch=getchar();while (ch<'0'||'9'<ch) f|=ch=='-', ch=getchar();while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();return f?-x:x; } void out(ll x) {int stackk[20];if(x<0) {putchar('-');x=-x;}if(!x) {putchar('0');return;}int top=0;while(x) stackk[++top]=x%10,x/=10;while(top) putchar(stackk[top--]+'0'); } ll a[1333][1333],n,m,ans,b[1311][1313],c[1311][1313]; ll f(ll x,ll y,ll z) {if(z%2)return (b[x+z][y+z]-b[x-1][y-1])+(c[x+z][y]-c[x-1][y+z+1]);elsereturn (b[x+z][y+z]-b[x-1][y-1])+(c[x+z][y]-c[x-1][y+z+1])-a[x+z/2][y+z/2]; } int UpMing() {cin>>n>>m;for(int i=1 ; i<=n ; i++)for(int j=1 ; j<=m ; j++) {cin>>a[i][j];ans=max(ans,a[i][j]);}for(int i=1 ; i<=n ; i++)for(int j=1 ; j<=m ; j++) {for(int x=i,y=j; x<=n&&y<=m ; y++,x++)b[x][y]=b[x-1][y-1]+a[x][y];}for(int i=1 ; i<=n ; i++)for(int j=1 ; j<=m ; j++) {for(int x=i,y=j; x<=n&&y>=1 ; y--,x++)c[x][y]=c[x-1][y+1]+a[x][y];}for(int len=1 ; len<min(n,m); len++)for(int i=1 ; i<=n-len ; i++)for(int j=1 ; j<=m-len; j++)ans=max(ans,f(i,j,len));out(ans);Accept; } /* 3 3 2 -1 3 -4 2 1 1 2 -1 */
cpp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697相关知识
【约会指南】约会怎么安排活动 情侣必备最全约会指南
什么是约会?理解早期约会动态
约会地点如何选择 浪漫的约会地点
公主约会的魔法时刻公主约会游戏
【约会注意事项】约会注意事项有哪些 注意这几点让约会更美好
浪漫约会别搞砸 七夕约会7个注意事项
“约会”牡丹
约会送花推荐
约会送哪种花,第一次约会送什么花
约会送花不方便拿怎么办?约会送花怎么携带?
网址: 约会 https://www.huajiangbk.com/newsview2556656.html
| 上一篇: 周游台湾丨牵着爱人的手去那里晒幸 |
下一篇: Ciao邂逅“侬好”的浪漫指数, |
推荐分享
- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039
