Luogu P1282 多公尺諾骨牌

2021-08-07 03:59:41 字數 822 閱讀 6553

題目描述傳送門

多公尺諾骨牌有上下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°,使得上下兩個方塊互換位置。 程式設計用最少的旋轉次數使多公尺諾骨牌上下2行點數之差達到最小。

對於圖中的例子,只要將最後乙個多公尺諾骨牌旋轉180°,可使上下2行點數之差為0。

dp 設d(

i,j)

為前i 個多公尺諾骨牌上點數-下點數為

j時需要的最少翻轉次數。

由於可能有負數,將陣列平移一段。

決策有翻和不翻兩種,轉移即可。

**(順推)

#include

#include

#include

#include

using

namespace

std;

const

int inf=3000;

int d[1010][inf*2+10],a[1010],b[1010];

int main()

}int ans=1e9;

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

printf("%d\n",ans);

return

0;}

luogu P1282 多公尺諾骨牌

線性dp,需要一點理解。可以模擬揹包問題,此時的狀態不是揹包容量而是差值。f i j 代表對前 i 個牌在 j 的差值下 最小的翻動數。有遞推式 f i j min f i 1 j a i b i 1 f i 1 j b i a i a,b 為上下牌面數 ps 顯然 j 差值可能為負,程式設計時加個...

luogu 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 使得上下兩個方塊互換位置。程式設計...

luogu 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 使得上下兩個方塊互換位置...