poj 1191

继续黑书上的DP题~

难得的一道中文题啊...

这里题意就不说啦

最后题目理解外加公式转化,就变成了:求8*8的矩形进行n次分割后每一块的平方和的最小值。

 

看黑书上的讲解,觉得递归就可以解决的。。。

后面码代码的时候发现,这不正好可以直接写成记忆化搜索嘛~

用dp[k][i][j][k][g]  表示分割进行到k次时,矩形的左上角的坐标为(i,j)到右下角的坐标为(k,g)时的最小值

所以每次都对矩形的长和宽进行枚举:

dp[k][i][j][k][g]=min(dp(k-1,i,j,a,g)+sum[a+1][j][k][g] , dp(k-1,a+1,j,k,g)+sum[i][j][a][g]);  (i<=a<=k)

dp[k][i][j][k][g]=min(dp(k-1,i,j,k,b)+sum[i][b+1][k][g] ,dp(k-1,i,b+1,k,g)+sum[i][j][k][b] ); (j<=b<=g)

这样就可以求出dp[k][i][j][k][g];

每个状态都被dp数组记录下来了,这样在每次的递归调用中,如果这个状态已经被更新过,那么就不需要继续向下求值了,而是直接用dp数组记录的值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值