天天看點

【bzoj1192】【HNOI2006】【鬼谷子的錢袋】

題目大意

你有一些錢,你要分最少的組使你可以通過選取其中的一些組來支付所有小于等于你擁有錢的金額。

解題思路

假設你有n元錢,你可以将 ⌈n/2⌉

的錢分一組,這樣就變成裡一個n/2的子問題,它能滿足就一定可以與 ⌈n/2⌉

配合滿足原問題。

code

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LF double
#define LL long long
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
LL n;
int main(){
    freopen("d.in","r",stdin);
    freopen("d.out","w",stdout);
    scanf("%lld",&n);
    if(n==){
        printf("1");
        return ;
    }
    fo(i,,){
        n=n/;
        if(!n){
            printf("%d",i);
            return ;
        }
    }
    return ;
}
           

繼續閱讀