NC20298. [SCOI2014]方伯伯的商场之旅
描述
输入描述
输入仅有 1 行,包含 3 个用空格分隔的整数 L,R,K,表示商场给方伯伯的 2 个整数,以及进制数
输出描述
输出仅有 1 行,包含 1 个整数,表示最少的代价。
示例1
输入:
3 8 3
输出:
5
C++ 解法, 执行用时: 25ms, 内存消耗: 8236K, 提交时间: 2022-07-15 11:53:59
#include <bits/stdc++.h> #define int long long using namespace std; int L,R,K; int a[100],f[100][10000]; int dfs(int now,int sum,int p,int lim){ if(!now)return max(sum,0LL); if(!lim&&~f[now][sum])return f[now][sum]; int ans=0; int num=lim?a[now]:K-1; for(int i=0;i<=num;i++) ans+=dfs(now-1,sum+(p==1?i*(now-1):(now<p?-i:i)),p,lim&&(i==num)); if(!lim)f[now][sum]=ans; return ans; } inline int Solve(int x){ int n=0; while(x){ a[++n]=x%K; x/=K; } int ans=0; for(int i=1;i<=n;i++){ memset(f,-1,sizeof(f)); ans+=((i==1)?1:-1)*dfs(n,0,i,1); } return ans; } signed main(){ scanf("%lld%lld%lld",&L,&R,&K); printf("%lld",Solve(R)-Solve(L-1)); return 0; }