题目链接:
化简公式,然后记忆化搜索求解。a=sqrt( Σ(xi-x)^2/n ) => n*a^2=(x1-x)^2 + (x2-x)^2 + ...... + (xn-x)^2 => n*a^2=(x1^2+x2^2+......+xn^2) - 2*(x1+x2+......xn)*x + n*x^2 . 可以看出就是求分割后平方和的最小值,然后记忆化搜索就可以了,f[k][x1][y1][x2][y2]为方块(x1,y2)-(x2,y2)还需分割k次后的平方和的最小值。这里可以先求出所有方块的平方和值,使得在搜索过程中求任意方块O(1)。看一下时间复杂度上限,一共有8^4方块,每个方块最多被分割n次,最多被2*8次更新,则O(8^5*n),所以直接循环枚举都能过,但用忆化搜索可以去掉许多不必要的状态。
1 //STATUS:C++_AC_0MS_592KB 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include