E36 数位DP 数字游戏
视频链接:https://www.bilibili.com/video/BV1fy4y1q79f/
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=12; int a[N]; //把整数的每一位数字抠出来,存入数组 int f[N][N]; //f[i][j]表示一共有i位,且最高位数字是j的不降数的个数 void init(){ //预处理不降数的个数 for(int i=0; i<=9; i++) f[1][i]=1; //一位数 for(int i=2; i<N; i++) //阶段:枚举位数 for(int j=0; j<=9; j++) //状态:枚举最高位 for(int k=j; k<=9; k++) //决策:枚举次高位 f[i][j]+=f[i-1][k]; } int dp(int n){ if(!n) return 1; //特判,n==0返回1 int cnt=0; while(n) a[++cnt]=n%10, n/=10;//把每一位抠出来存入数组a int res=0, last=0; //last表示上一位数字 for(int i=cnt; i>=1; --i){ //从高位到低位枚举 int now=a[i]; //now表示当前位数字 for(int j=last; j<now; j++) //枚举当前位可填入的数字 res += f[i][j]; //累加答案 if(now<last) break; //若小,则break last=now; //更新last if(i==1) res++; //特判,走到a1的情况 } return res; } int main(){ init(); //预处理不降数的个数 int l,r; while(cin>>l>>r) cout<<dp(r)-dp(l-1)<<endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!