博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2657 [SCOI2009]windy数 数位dp入门
阅读量:6571 次
发布时间:2019-06-24

本文共 1870 字,大约阅读时间需要 6 分钟。

 

 

参考了题解,理解仍然还不够透彻

#include
using namespace std;const int N=550;const int maxn=1e6+7;int num[maxn];int dp[N][N];int a,b;int dfs(int len,int pre,bool flag,bool zero){ if(len==0) { return 1; } if(!zero&&!flag&&dp[len][pre]!=-1) { return dp[len][pre]; } int p,cnt=0,maxx=(flag?num[len]:9); for(int i=0;i<=maxx;i++) { if(abs(i-pre)<2) { continue; } p=i; if(zero&&i==0) { p=-233; } cnt+=dfs(len-1,p,(flag)&&(i==maxx),(p==-233)); } if(!flag&&!zero) { dp[len][pre]=cnt; } return cnt;}int solve(int x){ int k=0; while(x) { num[++k]=x%10; x/=10; } memset(dp,-1,sizeof(dp)); return dfs(k,-233,true,true);}int main(){ scanf("%d%d",&a,&b); printf("%d",solve(b)-solve(a-1)); return 0;}

 还有一种更易理解的做法

#include
using namespace std;typedef long long ll;ll dp[15][15],ans;//dp[i][j]表示搜到第i位,前一位是j,的!limit方案totnum;int a[15],len;long long L,R;ll dfs(int pos,int pre,int st,int limit)//pos当前位置,pre前一位数,st判断前面是否全是0,limit最高位限制 { if(pos>len) return 1;//搜完了 if(!limit&&dp[pos][pre]!=-1) return dp[pos][pre];//没有最高位限制,已经搜过了 ll ret=0; int res=limit?a[len-pos+1]:9;//当前位最大数字 for(int i=0;i<=res;i++)//从0枚举到最大数字 { if(abs(i-pre)<2) continue;//不符合题意,继续 if(st&&i==0) ret+=dfs(pos+1,-2,1,limit&&i==res);//如果有前导0,下一位随意 else ret+=dfs(pos+1,i,0,limit&&i==res);//如果没有前导0,继续按部就班地搜 } if(!limit&&!st) dp[pos][pre]=ret;//没有最高位限制且没有前导0时记录结果 return ret;}void part(ll x){ len=0; while(x) a[++len]=x%10,x/=10; memset(dp,-1,sizeof dp); ans=dfs(1,-2,1,1);}int main(){ scanf("%lld%lld",&L,&R); part(L-1);ll minn=ans; part(R); ll maxx=ans; printf("%lld",maxx-minn); return 0;}

 

转载于:https://www.cnblogs.com/LJB666/p/10817108.html

你可能感兴趣的文章
Xcode里-ObjC, -all_load, -force_load
查看>>
cas单点登录学习:配置数据库验证进行登录
查看>>
Selenium2(WebDriver)_如何判断WebElement元素对象是否存在
查看>>
《代码敲不队》第八次团队作业:Alpha冲刺 第一天
查看>>
【leetcode】945. Minimum Increment to Make Array Unique
查看>>
Android Studio: Plugin with id 'android-library' not found
查看>>
圆形旋转背景图案
查看>>
[转] 周志华:关于机器学习的一点思考
查看>>
研磨设计模式学习笔记4--单例模式Signleton
查看>>
linux命令
查看>>
NET Core 简介
查看>>
SQL server 2008数据库的备份与还原(转)
查看>>
PHP最全笔记(一)(值得收藏,不时翻看一下)
查看>>
android中 EditTex t的 inputType 属性
查看>>
百度地图API的第一次接触
查看>>
【Unity Shaders】Using Textures for Effects——打包和混合textures
查看>>
深入分析 Java 中的中文编码问题 (文章来自网络)
查看>>
python:**kwargs
查看>>
ssh免密登陆(简单快捷)
查看>>
电梯调度二——曹玉松&&蔡迎盈
查看>>