CodeForces - 204A Little Elephant and Interval
Posted on 2022-11-03 18:17 Capterlliar 阅读(17) 评论(0) 编辑 收藏 举报题意:给定区间[l, r],问区间内有多少第一个数字和末尾数字一样的数。
解:练习一些数位dp。先从高到低dp[pos][fir]表示dp到第pos个位置,以fir开头的串的数量,其中fir不为0。这道题0055和55显然不同,有前导0的影响,因此再加一维[con],然后en往板子里套。
代码:

#include <bits/stdc++.h> using namespace std; #define maxx 100005 #define maxn 25 #define maxm 205 #define ll long long #define inf 1000000009 #define mod 1000000007 int a[20]; int len; ll dp[20][10][2]={0}; ll dfs(ll pos,ll fir,ll pre,ll con,ll limit){ if(pos==0) { return !con&&pre==fir; } if(!limit&&fir!=-1&&dp[pos][fir][con]!=-1) return dp[pos][fir][con]; ll ret=0; ll res=limit?a[pos]:9; for(int i=0;i<=res;i++){ if(con&&(i!=0)) fir=i; ret+= dfs(pos-1,fir,i,con&&(i==0),limit&&(a[pos]==i)); } return !limit?dp[pos][fir][con]=ret:ret; } ll solve(ll x){ len=0; while(x){ a[++len]=x%10; x/=10; } return dfs(len,-1,0,1,1); } signed main() { // int T; // scanf("%d",&T); // while(T--) {; // // } ll l,r; memset(dp,-1,sizeof dp); cin>>l>>r; cout<<solve(r)- solve(l-1)<<'\n'; return 0; }
标签:
DP on CF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?