题目:
题意:
给定n个牌,每个牌有一个上点数和下点数。可以通过旋转改变交换上下点数。
问使得上点数之和和下点数之和的差的绝对值最小的最少旋转方法。
思路:
新增一个牌,对于点数差的贡献是+a-b或-a+b
所以很自然的可以写出状态转移方程dp[i][s]=min(dp[i-1][s-a+b], dp[i-1][s+a-b]+1)
需要注意的是第二维放的是差,有可能是负数,所以要加一个偏移量。
而s的范围应该没有限制,从最小到最大值。
最后在0~最大值中寻找一个最小的s(表示的是绝对值),使得dp[n][s]或dp[n][-s]是有值的,就是答案。
1 #include 2 #include 3 #include