問題描述:戳這裡
大致題意是給出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 差值可能為負,程式設計時加個...