poj 1191解题报告

本文探讨了一道关于棋盘切割的问题,通过动态规划的方法来寻找切割棋盘以使均方差最小化的最优解。文章详细阐述了状态转移方程,并给出了部分实现代码。


题意就不要说啦。。中文的题意描述。。链接地址如下。。
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即可得解。。。

 

转载于:https://www.cnblogs.com/cnjy/archive/2009/08/18/1549241.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值