题意就不要说啦。。中文的题意描述。。链接地址如下。。
http://162.105.81.212/JudgeOnline/problem?id=1191
此题乍看貌似是搜索题,由于棋盘大小固定是8行8列。枚举所有的切割可能性。。然后发现以我的水平还无法去实现。。
然后发现题目中一句话说的切割必须要沿着棋盘格子的边进行。貌似dp。。。
然后再发现研究它的状态方程其实可以表示为dp[i,棋盘大小] = min( dp[i-1,切割1刀后的某部分棋盘大小] + d[1,切割1刀后棋盘剩余的部分] )
其中dp[i,棋盘大小]表示的是当棋盘切割i刀后得到((均方差最小值)^2)*n的最小值
边界状态即为dp[1,棋盘大小]=(棋盘大小总分-平均值avg)^2
通过方程我们可以看出平均值其实是一定值为(棋盘总分)/n。。
部分dp状态方程实现如下:
for( int i = lx1 ; i < lx2 ; i++ ){
minvalue = minx( minvalue , Dp(value-1,i+1,ly1,lx2,ly2) + d[1][lx1][ly1][i][ly2] , d[1][i+1][ly1][lx2][ly2] + Dp(value-1,lx1,ly1,i,ly2) );
}
for( int j = ly1 ; j < ly2 ; j++ ){
minvalue = minx( minvalue , Dp(value-1,lx1,j+1,lx2,ly2) + d[1][lx1][ly1][lx2][j] , d[1][lx1][j+1][lx2][ly2] + Dp(value-1,lx1,ly1,lx2,j) );
}
Dp[value,lx1,ly1,lx2,ly2] = minvalue;
最后结果只需计算Dp[n,1,1,8,8]/n即可得解。。。