有一种价值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); } }
时间: 2024-11-08 10:16:11