《洛谷P1282 多公尺諾骨牌》

2022-06-19 20:03:08 字數 1236 閱讀 9505

好題!

第一眼就感覺是dp。

設dp[i][j]表示到第i個位置上面-下面為j的最小步數。

可以發現,這裡由於上面-下面可能是負的。

那麼單純去dp顯然不行。

這裡就用到了乙個思想,零點轉移。

因為差距最多在5,6000左右,我們設6000為0點,那麼-t就變成了6000-t。

然後就可以去dp了,正負分開下判斷即可。

//

author: levil

#includeusing

namespace

std;

typedef

long

long

ll;typedef pair

pii;

const

int n = 1e3+5

;const

int m = 2e4+5

;const ll mod = 1e9+7

;#define rg register

#define pi acos(-1)

#define inf 1e9

#define ct0 cin.tie(0),cout.tie(0)

#define io ios::sync_with_stdio(false)

#define dbg(ax) cout << "now this num is " << ax << endl;

namespace

fastio

while(c >= '

0' && c <= '9')

return x*f;

}void print(int

x)

if(x > 9) print(x/10

); putchar(x%10+'0'

); }

}using

namespace

fastio;

void fre()

int a[1005],b[1005],dp[n][12005

];int

main()

else

}int ans =inf,step;

for(int i = 0;i <= 12000;++i)

printf(

"%d\n

",step);

system(

"pause

");

}

view code

洛谷 P1282 多公尺諾骨牌

題目描述 多公尺諾骨牌有上下2個方塊組成,每個方塊中有1 6個點。現有排成行的 上方塊中點數之和記為s1,下方塊中點數之和記為s2,它們的差為 s1 s2 例如在圖8 1中,s1 6 1 1 1 9,s2 1 5 3 2 11,s1 s2 2。每個多公尺諾骨牌可以旋轉180 使得上下兩個方塊互換位置...

洛谷p1282多公尺諾骨牌

多公尺諾骨牌有上下2個方塊組成,每個方塊中有1 6個點。現有排成行的 上方塊中點數之和記為s1,下方塊中點數之和記為s2,它們的差為 s1 s2 例如在圖8 1中,s1 6 1 1 1 9,s2 1 5 3 2 11,s1 s2 2。每個多公尺諾骨牌可以旋轉180 使得上下兩個方塊互換位置。程式設計...

洛谷p1282多公尺諾骨牌

大佬的思路 這其實是一道 披著狼皮的揹包題 我們只需要對狀態稍作調整就可以套揹包啦 我們先把骨牌翻轉,調整至點數大的在上面 這樣,我們就能保證上方的點數一定比下方大,並且保證每翻轉一 次,都能使上下的點數之差變小,而變小的點數,就是上下點數之差乘以2。把改變的點數看成物品的體積,初始上下方的點數之差...