你
有
一
张
n
行
m
列
的
网
格
纸
,
每
个
格
子
上
有
一个
整数
。
对
于一
张
网
格
纸
X
,
定
义
w
(
X
)
为
X
所
有
格
子
上
的
整数
之
和
。
在
裁
纸
游
戏
中
,
你
可
以
通
过
如
下
规
则
得
分
(
初
始
分
数
为
0
):
选
择
一
张
网
格
纸
Y
,
将
Y
沿
着
非
边
界
的
网
格
线
(
相
邻
的
两
行
或
两
列
之
间
的
线
,
而
不
是
边
界
)
剪
开
,
得
到
两
张
新
的
网
格
纸
Y
1
, Y
2
。
通
过这
次
裁
剪
,
你
可
以
获
得
w
(
Y
1
)
×
w
(
Y
2
)
的
分
数
。
你
可
以
进
行
任
意
次
(
包
括
零
次
)
的
裁
剪
操
作
,
试
最
大
化
你
的
得
分
,
并
输
出
这
个
分
数
。
Input
第
一
行
包
含
两个
正
整数
n, m
(1
≤
n
×
m
≤
10^
6
)
.
接
下
来
n
行
,
每
行
m
个
整数,每个整数>0且小于10^3
Output
一
行
一个
整数
,
表
示
可
能
的
最
大
得
分
。
题解:
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long pre,ans,a;
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
scanf("%lld",&a);
ans+=pre*a;
pre+=a;//当前元素的前缀和
}
printf("%lld",ans);//答案为所有两两不相同的点的乘积的和
return 0;
}
时间复杂度O(nm)