题目
[外链图片转存失败(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
输出样例
1
解题思路
我们不妨先不考虑最少旋转次数,而是找出一个使上下两行绝对值差最小的方案。也许有人会想到用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[I–1,j–(a[i]–b[i])]orf[i–