時間限制: 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...