【DP】多米诺骨牌

题目

[外链图片转存失败(img-FkH2WZOZ-1562483000261)(http://10.156.17.250/JudgeOnline/image/1632.gif =490x330)]

输入

输入文件的第一行是一个正整数n(1≤n≤1000),表示多米诺骨牌数。接下来的n行表示n个多米诺骨牌的点数。每行有两个用空格隔开的正整数,表示多米诺骨牌上下方块中的点数a和b,且1≤a,b≤6。

输出

输出文件仅一行,包含一个整数。表示求得的最小旋转次数。

输入样例

4
6 1
1 5
1 3
1 2

输出样例

解题思路

我们不妨先不考虑最少旋转次数,而是找出一个使上下两行绝对值差最小的方案。也许有人会想到用F[I]表示前I张骨牌能够成的最小差值,构造一个动态规划方程来解决该问题。但只要细想就会发现,该问题用这种方式规划不满足最优性原理,用这种形式的动态规划实际上是一种贪心,有反例!注意到骨牌上的点数范围很小,只可取0到6,因此,我们可以用F[I,J]表示前I张骨牌能否构造出上下差为J的方案。于是我们可以列出如下动态转移方程:
f [ i , j ] = f [ I – 1 , j – ( a [ i ] – b [ i ] ) ] o r f [ i – 1 , j – ( b [ i ] − a [ i ] ) ] f[i,j] = f[I – 1, j – (a[i] – b[i])] or f[i – 1, j–(b[i] - a[i])] f[i,j]=f[I1,j(a[i]b[i])]orf[i

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值