博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p2657 windy数
阅读量:6070 次
发布时间:2019-06-20

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

分析

首先这是一个询问一段区间内的个数的问题,所以我们可以用差分的思想用sum(R)-sum(L-1)。然后我们考虑如何求出sum(n),我们用dp[i][j][k][t]表示考虑到第i位,最后一个数是j,是否已经小于n和是否已经考虑完前导零。至于转移和一般的套路一样,详见代码。注意最后记得考虑n自己。

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;long long a[20],dp[20][11][2][2];inline long long go(long long n){ if(!n)return 0; long long m=n,i,j,k,cnt=0; long long h=10,lo=1; while(1){ if(m
=lo)break; h*=10,lo*=10; } while(lo){ a[++cnt]=m/lo; m%=lo; lo/=10; } memset(dp,0,sizeof(dp)); dp[0][0][0][0]=1; a[0]=0; for(i=1;i<=cnt;i++){ for(j=0;j<=a[i];j++){ k=a[i-1]; if(abs(j-k)>=2){ if(j
=2){ dp[i][j][1][1]+=dp[i-1][k][1][1]; } if(!k){ if(j)dp[i][j][1][1]+=dp[i-1][k][1][0]; else dp[i][j][1][0]+=dp[i-1][k][1][0]; } } } } long long ans=dp[cnt][a[cnt]][0][1]; for(i=0;i<=9;i++) ans+=dp[cnt][i][1][1]; return ans;}int main(){ long long a,b; scanf("%lld%lld",&a,&b); cout<
<

转载于:https://www.cnblogs.com/yzxverygood/p/9491662.html

你可能感兴趣的文章
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
dom4j解析xml文件
查看>>
第六周
查看>>
斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)...
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Fundebug前端JavaScript插件更新至1.6.0,新增test()方法用于测试
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
复杂业务下,我们为何选择Akka作为异步通信框架?
查看>>