HNOI2006 鬼谷子的錢袋

2022-08-19 22:27:09 字數 593 閱讀 6930

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 鬼谷子的錢袋

鬼谷子的錢袋 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行 聚寶商行 將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是...