题解:
下标为奇数位置上的数的系数必须要为0剩下的就是数位dp了。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=100;
int n,m,k;
int a[N],f[N];
int dfs(int idx,int limit){
if(idx==0) return 1;
if(!limit&&f[idx]!=-1) return f[idx];
int up=limit?a[idx]:(k-1);
if(idx%2==0) up=0;
int res=0;
for(int i=0;i<=up;i++){
res+=dfs(idx-1,limit&&i==a[idx]);
}
if(!limit) f[idx]=res;
return res;
}
void solve()
{
scanf("%lld%lld",&n,&k);
int tmp=n,idx=0;
while(tmp){
a[++idx]=tmp%k;
tmp/=k;
}
memset(f,-1,sizeof f);
cout<<dfs(idx,1)<<'\n';
}
signed main()
{
solve();
}