【BZOJ】【1026】【SCOI2009】Windy数
数位DP
cxlove基础数位DP第三题
= =预处理是个很有用的东西!然后就是分类讨论!

1 /************************************************************** 2 Problem: 1026 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:0 ms 7 Memory:1272 kb 8 ****************************************************************/ 9 10 //BZOJ 1026 11 #include<cmath> 12 #include<vector> 13 #include<cstdio> 14 #include<cstring> 15 #include<cstdlib> 16 #include<iostream> 17 #include<algorithm> 18 #define rep(i,n) for(int i=0;i<n;++i) 19 #define F(i,j,n) for(int i=j;i<=n;++i) 20 #define D(i,j,n) for(int i=j;i>=n;--i) 21 #define pb push_back 22 using namespace std; 23 int getint(){ 24 int v=0,sign=1; char ch=getchar(); 25 while(!isdigit(ch)) {if(ch=='-') sign=-1; ch=getchar();} 26 while(isdigit(ch)) {v=v*10+ch-'0'; ch=getchar();} 27 return v*sign; 28 } 29 const int N=1e7+10,INF=~0u>>2; 30 const double eps=1e-8; 31 /*******************template********************/ 32 int dp[15][15]; 33 void init(){ 34 F(i,0,9) dp[1][i]=1; 35 F(i,2,10) 36 F(j,0,9) 37 F(k,0,9) 38 if (abs(j-k)>=2) dp[i][j]+=dp[i-1][k]; 39 } 40 int solve(int n){ 41 int len=0,bit[15]; 42 for(;n;n/=10) bit[++len]=n%10; 43 bit[len+1]=0; 44 int ans=0; 45 //长度为1~len-1的 46 F(i,1,len-1) 47 F(j,1,9) 48 ans+=dp[i][j]; 49 //长度为len,但最高位没达到上界 50 F(j,1,bit[len]-1) ans+=dp[len][j]; 51 //长度为len,且最高位达到上界 52 D(i,len-1,1){ 53 F(j,0,bit[i]-1) 54 if (abs(j-bit[i+1])>=2) ans+=dp[i][j]; 55 if (abs(bit[i]-bit[i+1])<2) break; 56 } 57 return ans; 58 } 59 int main(){ 60 init(); 61 int l,r; 62 while(scanf("%d%d",&l,&r)!=EOF) 63 printf("%d\n",solve(r+1)-solve(l)); 64 return 0; 65 } 66
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 用99元买的服务器搭一套CI/CD系统
· 如何在 .NET 中 使用 ANTLR4