解題報告 P1282 多公尺諾骨牌

2021-08-15 21:16:37 字數 921 閱讀 7311

我們首先來對它來進行分析,我們首先發現他應該是用乙個二維揹包來解決的問題。

二維揹包第乙個維度儲存多公尺諾骨牌序號i,第二維度儲存前i個多公尺諾骨牌第一行的權值,最後每個變數的值表示的是要操作的次數。

於是動歸方程式如下:

if(j-x1[i]>=0) bag[i][j]=min(bag[i-1][j-x1[i]],bag[i][j]);

if(j-x2[i]>=0) bag[i][j]=min(bag[i-1][j-x2[i]]+1,bag[i][j]);

一定要記住必須反著寫動態規劃方程式,否則會gg,因為會出現重複相加的情況!!!謹記!!!!!!!!!!!

下面這道題如果想到以上這些,這道題已經就ac了,下面上**:

#include

#include

#include

using

namespace

std;

int bag[1006][6005];//分別記錄前i個骨牌中第一行骨牌的和

int x1[1006], x2[1006];

int main()

memset(bag,0x7f7f7f7f7f,sizeof(bag));

bag[1][x1[1]]=0;

bag[1][x2[1]]=1;

for(int i=1;i<=n;++i)

}int ans;

if(sum%2==1)

ans=sum/2+1;

else ans=sum/2;

while(bag[n][ans]==0x7f7f7f7f7f)

ans--;

printf("%d",bag[n][ans]);

return

0;}

解題報告 P1282 多公尺諾骨牌

我們首先來對它來進行分析,我們首先發現他應該是用乙個二維揹包來解決的問題。二維揹包第乙個維度儲存多公尺諾骨牌序號i,第二維度儲存前i個多公尺諾骨牌第一行的權值,最後每個變數的值表示的是要操作的次數。於是動歸方程式如下 if j x1 i 0 bag i j min bag i 1 j x1 i ba...

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