BZOJ 1192 鬼谷子的錢袋 思維

2021-09-30 17:03:17 字數 1272 閱讀 7071

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

input

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

output

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

sample input

sample output

hint

思路:一開始想這道題目時,就聯想到了多重揹包的二進位制優化,二者思想是一樣的,因為二進位制的數組合能產生其他別的數,所以我們要求得是他能分解成幾個二進位制只有一位為1的數,即1、2、4...2^k,我們要的結果就是k+1。一開始沒想到好辦法,就把這些數找出來求和,最後二分找到符合條件的數。之後看了題解才發現還有一種更簡單的方法用log函式。

對數函式,不是很會用,這次也正好學一下,以後也應該有意識往這邊想一下。

ac**:

#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pi acos(-1.0)

#define eps 1e-8

using namespace std;

ll a[500];

int main()

ll n;

while(~scanf("%lld",&n))

return 0;

}

#include#include#include#include#include#include#include#include#include#define ll long long

#define mod 1000000007

#define eps 1e-8

using namespace std;

int main()

0

BZOJ 1192 鬼谷子的錢袋

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

Bzoj1192 鬼谷子的錢袋

time limit 10 sec memory limit 162 mb submit 3312 solved 2412 submit status discuss 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍...

bzoj 1192 鬼谷子的錢袋

題目大意 用盡可能少的不同的自然數 兩兩不相同 這些自然數的和為m 且這些數能表示出m及m以下的所有數,求這些自然數的個數 思路 根據小學數學很容易就能看出 這是一道小學數學題 只要排出二進位制就好了 所以我們要找到2 k次方使它大於m 1 include2 include3 include4 in...