题目简述
自行理解
在一个
n×m的矩阵,每格一个正整数值
ai,j,从
(1,1)到
(n,m) ,每次选择向右或向下走,不可出界,会经过
n+m−1个格子,将经过的值依次为
K1,K2,...,Kn+m−1。其平均值记为
K。
求
(n+m−1)×∑i=1n+m−1(Ki−K)2min
题目实现
首先,我们会发现,要求值的式子十分繁琐,直觉告诉我们,它肯定要化简。
令
G=n+m−1 ,
S=∑i=1GKi , 则
K=GS。
(n+m−1)×i=1∑n+m−1(Ki−K)2=G×i=1∑G(Ki−GS)2=G×i=1∑G(Ki2−G2KiS+G2S2)=G×i=1∑GKi2−G×i=1∑GG2KiS+G×i=1∑GG2S2=Gi=1∑GKi2−2Si=1∑GKi+G×GS2=Gi=1∑GKi2−2S2+S2=Gi=1∑GKi2−S2
因此
当
∑i=1GKi2 一定时,
S越大,原值就越小。
当
S 一定时,
∑i=1GKi2越小,原值就越小。
此时直觉告诉我们,后者显然更好做。
然后,聪明的你又会发现数据十分的好:
CPP对于 100%的数据 T≤5,n≤30,m≤30,所有 ai,j≤30
导致
Smax只有
(nmax+mmax−1)×Kimax=(30+30−1)×30=1770
设计
fs,i,j表示到
(i,j)和为
s的最小的
G∗∑(Ai2),最后枚举
s取
fs,i,j−s2的最小值