link
用二進位制表示是最少的
把m變成二進位制,那麼用m的二進位制的位數那麼多錢袋就可以了
比如m=11010
那麼多個錢袋放1,10,100,1000,10000,最多可以達到1111
所以這道題就是求m的二進位制位數
實際上本題就是「多重揹包的二進位制優化」,用二進位制拆分就行,然而題中說兩數除了1之外都不能相同,比如9,拆分後就是1 2 4 2, 不符合,對拆分序列進行排序,在拆分的時候遇到a[i] == a[i + 1] 的情況,就a[i]--, a[i + 1]++就行,最終得到拆分的方案。
ac**如下:
#includeusing namespace std;
const int maxn = 105;
int m, cnt, a[maxn];
int main()
if(m!=0) a[++cnt] = m; //多餘部分處理
cout
for(int i = 1; i <= cnt; ++i)
return 0;
}
HNOI2006 鬼谷子的錢袋
time limit 10 sec memory limit 162 mb submit 5784 solved 3880 submit status discuss description 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,...
HNOI2006 鬼谷子的錢袋
嘟嘟嘟 這題學過多重揹包二進位制優化都知道用二進位制拆分就行,然而題中說兩數不能相同,比如9,拆分後就是1 2 2 4,不符合,所以遇到a i a i 1 的情況,就a i a i 1 就行。1 include2 include3 include4 include5 include6 include...
HNOI2006 鬼谷子的錢袋
鬼谷子的錢袋 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行 聚寶商行 將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是...