problemcutter

导航

SPOJ Problem 346:Bytelandian gold coins

有一种价值n的硬币能换成n/2,n/3,n/4的三个硬币,要求硬币价值的和尽可能多。

前十万打表,后面就BFS。。。

#include<cstdio>
#include<cstring>
int a[100005];
int q[100005],l,r,t,i,n;
long long ans;
int main(){
    for (i=0;i<=100000;i++){
        a[i]=a[i/2]+a[i/3]+a[i/4];
        if (i>a[i])a[i]=i;
    }
    while(scanf("%d",&n)!=EOF){
        l=0;r=1;ans=0;
        memset(q,0,sizeof(q));
        q[1]=n;
        while(l<r){
            t=q[++l];
            if (t<=100000)ans+=a[t];
            else {
                q[++r]=t/2;
                q[++r]=t/3;
                q[++r]=t/4;
            }
        }
        printf("%lld\n",ans);
    }
}

 

posted on 2015-03-05 19:07  problemcutter  阅读(127)  评论(0编辑  收藏  举报