2144 砝碼稱重 2

2021-09-07 12:36:12 字數 1290 閱讀 9335

時間限制: 1 s

空間限制: 16000 kb

題目等級 : 鑽石 diamond

題解

description

有n個砝碼,現在要稱乙個質量為m的物體,請問最少需要挑出幾個砝碼來稱?

注意乙個砝碼最多只能挑一次

輸入描述 

input description

第一行兩個整數n和m,接下來n行每行乙個整數表示每個砝碼的重量。

輸出描述 

output description

輸出選擇的砝碼的總數k,你的程式必須使得k盡量的小。

樣例輸入 

sample input

3 1059

1 樣例輸出 

sample output

資料範圍及提示 

data size & hint

1<=n<=30,1<=m<=2^31,1<=每個砝碼的質量<=2^30

分類標籤 tags 點此展開 

這個題,,

非常考研剪枝能力,

除了正常的最優性剪枝

還要用字尾和剪枝。

醉了醉了。。

1 #include2 #include3 #include4 #include5 #include6 #include7

#define lli long long int

8using

namespace

std;

9void read(lli &n)

1014

while(c>='

0'&&c<='9'

)15

16 flag==1?n=-x:n=x;17}

18lli n,p;

19 lli a[10001

];20 lli sum2[10001

];21 mapmp;

22lli comp(lli a,lli b)

2326 lli ans=0x7ffff;27

void

dfs(lli now,lli num,lli step,lli sum)

2838

if(sum2[now]+sum39return;40

if(now==n)

41return

;42 dfs(now+1,a[now+1],step+1,sum+a[now+1

]);43 dfs(now+1

,num,step,sum);44}

45int

main()

46

Codevs 2144 砝碼稱重 2

時間限制 1 s 空間限制 16000 kb 題目等級 鑽石 diamond 題解有n個砝碼,現在要稱乙個質量為m的物體,請問最少需要挑出幾個砝碼來稱?注意乙個砝碼最多只能挑一次 輸入描述 input description 第一行兩個整數n和m,接下來n行每行乙個整數表示每個砝碼的重量。輸出描述 ...

Codevs No 2144 砝碼稱重2

2016 05 31 22 01 16 題目大意 給定n個砝碼,求稱出m的重量所需砝碼最小個數 解法 貪心 使砝碼數量最小,當然是每個砝碼越大越好 首先排序,從大砝碼開始試,遇到的第乙個解一定最優 需要注意的地方 1.這道題的資料還是很給力的,裸貪心過不了,要加乙個字首和判斷可達性進行優化 1 砝碼...

codevs 2144 砝碼稱重 2(搜尋 剪枝)

codevs 2144 砝碼稱重 2 題目描述 description 有n個砝碼,現在要稱乙個質量為m的物體,請問最少需要挑出幾個砝碼來稱?注意乙個砝碼最多只能挑一次 輸入描述 input description 第一行兩個整數n和m,接下來n行每行乙個整數表示每個砝碼的重量。輸出描述 outpu...