HNOI2006 鬼谷子的錢袋

2021-09-29 21:46:29 字數 946 閱讀 4218

time limit: 10 sec memory limit: 162 mb

submit: 5784 solved: 3880

[submit][status][discuss]

description

鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行(聚寶商行)將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是出發時間是在拍賣會快要結束的時候。於是,他決定事先做好準備,將自己的金幣數好並用乙個個的小錢袋裝好,以便在他現有金幣的支付能力下,任何數目的金幣他都能用這些封閉好的小錢的組合來付賬。鬼谷子也是乙個非常節儉的人,他想方設法使自己在滿足上述要求的前提下,所用的錢袋數最少,並且不有兩個錢袋裝有相同的大於1的金幣數。假設他有m個金幣,你能猜到他會用多少個錢袋,並且每個錢袋裝多少個金幣嗎?

input

包含乙個整數,表示鬼谷子現有的總的金幣數目m。其中,1≤m ≤1000000000。

output

只有乙個整數h,表示所用錢袋個數

sample input

3sample output

2我們知道數都可以被二進位制瓜分,所以我們直接考慮對錢數進行二進位制分解,因為他說的只有裝1的錢袋可以重複。那麼當我們出現ai=

a(i+

1)

ai=a(i+1)

ai=a(i

+1)的時候我們前乙個數減一,後乙個數加一就行了。

#include

#define ll long long

#define int long long

using

namespace std;

signed

main()

cout<}

HNOI2006 鬼谷子的錢袋

嘟嘟嘟 這題學過多重揹包二進位制優化都知道用二進位制拆分就行,然而題中說兩數不能相同,比如9,拆分後就是1 2 2 4,不符合,所以遇到a i a i 1 的情況,就a i a i 1 就行。1 include2 include3 include4 include5 include6 include...

HNOI2006 鬼谷子的錢袋

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

HNOI2006 鬼谷子的錢袋

做法和二進位制劃分很像,原來我的二進位制劃分一直有點問題 之前我是列舉2的n次方然後減,逃 我們舉20這個例子,假如我們要表示20以內的數,那麼一定要取10,然後再表示出1到10之內的數,加上10也就表示出了11到20之內的數。同理,不斷往下推,我們發現將m不斷二分,每次得到的結果一定可以表示m以內...