我们构造数列
g
,使得
贪心地分解 n 得到
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
const int maxn=10000010;
LL g[maxn],n,ans;
int m;
int main()
{
int p;
scanf("%lld%d",&n,&m);
for (int i=0;i<=m;i++) g[i]=1;
for (int i=m+1;;i++)
{
g[i]=g[i-1]+g[i-m];
if (g[i]>n)
{
p=i;
break;
}
}
for (int i=p-1;n;i--)
if (n>=g[i])
{
ans+=g[i-1];
n-=g[i];
}
printf("%lld\n",ans);
}