lg P1282 多公尺諾骨牌

2021-09-19 04:32:11 字數 848 閱讀 6647

問題描述:戳這裡

大致題意是給出n對數 一次操作可以交換左右兩個數,問最小的操作次數使得左邊的數之和 和 右邊的數字之和 的差值最小。

題解

巧妙的轉化為乙個揹包問題。

先將大的數都調整到左邊,所以每次調整都可以使差值減小,改變的差值就是揹包的體積,價值是1或者-1,若本身就滿足左大右小,那麼重量為-1,即是乙個反悔的過程。

所以要求的就是使得體積盡量大的最小重量。

詳見注釋

code

#include

using namespace std;

int v[

1005

],w[

1005

],f[

1005][

10000

],vis[

1005][

10000];

int n,v=

0,st=0;

intmain()

else

}for

(int i=

1;i<=n;i++

)for

(int j=

1;j<=v;j++

)else f[i]

[j]=

min(f[i]

[j],f[i-1]

[j-v[i]

]+w[i]);

}for

(int i=v;i>=

1;i--)if

(vis[n]

[i])

return0;

}

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

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 差值可能為負,程式設計時加個...