$SCOI2009\ windy$数 数位$dp$
\(Sol\)
数位\(dp\)常规套路题.
\(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里\(dp\)的过程十分简单,一般出错的也就是计算小于等于\(x\)的\(windy\)数,所以这里简述一下这个流程:
首先是预处理出\(x\)的位数\(ct\),\(a[i]\)表示数\(x\)从低到高第\(i\)位的数字是多少,然后累计第一种安全态的答案\(as+=\sum _{i=1}^{ct-1}\sum _{j=1}^{9}f[i][j]\).
接着累计第二种安全态的答案,也就是第\(ct\)位(从低到高)的数小于\(a[ct]\)的,\(as+=\sum_{j=1}^{a[ct]-1}f[ct][j]\).
最后也就是最容易出错的地方便是统计危险态的答案.假设当前填到第\(i\)位且\(i\)到\(ct\)的数字都和\(x\)一样,那么第\(i-1\)位上填的数就有两个限制,一是要小于\(a[i-1]\),还有就是要与\(a[i]\)的差的绝对值要大于等于\(2\).
会发现上面的统计有两个漏洞,一是如果数\(x\)是\(windy\)数,那么会少算一个,这个问题很好解决,判断一下就好.令一个问题是假设当前填到\(i\),且\(abs(a[i]-a[i-1])<=2\),那么下一位就不能填\(a[i-1]\),那么也就不用继续统计危险态的答案了,直接\(break\)掉.
\(Code\)
Code
```cpp
#include
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c=2)f[i][j]+=f[i-1][k];
}
il int sol(Ri x)
{
if(!x)return 0;
Ri qvq=x,ct=0,ret=0;bool fl=1;
while(qvq){a[++ct]=qvq%10;qvq/=10;}
go(i,1,ct-1)
go(j,1,9)ret+=f[i][j];
go(i,1,a[ct]-1)ret+=f[ct][i];
yes(i,ct,2)
{
go(j,0,a[i-1]-1)
{
if(abs(j-a[i])>=2)ret+=f[i-1][j];
}
if(abs(a[i]-a[i-1])
随机推荐
- tp3 key json 分页
//json 强制转换为array $arr[$key]['checkpro'] = json_decode($val['checkpro'],JSON_FORCE_ARRAY); $arr[$ ...
- <肖申克的救赎>观后感
肖申克的救赎主要讲述了银行家安迪在不健全的法律制度下被陷害进入了--鲨堡监狱,最后为了重见光明.追求自由,实现“自我救赎”的故事. 1.希望是件好东西,也许是世上最好的东西.好东西从来不会流逝. Ho ...
- iptables 防止DoS攻击
SYN洪水是攻击者发送海量的SYN请求到目标服务器上的一种DoS攻击方法,下面的脚本用于预防轻量级的DoS攻击:ipt-tcp.sh: iptables -N syn-flood (如果您的防火墙默认 ...
- Eclipse里编辑代码,进度条出现“Remote System Explorer Operation”解决方法
Eclipse里编辑代码,进度条出现"Remote System Explorer Operation",导致Eclipse有卡顿. 解决方法: Eclipse -> Pre ...
- ip2long之后有什么好处?
ip2long需要bigint来存储,而且在32位和64位系统中存储方式还有区别: 而保存成字符串,只需要char20即可. 那么,ip2long好处在哪? 做投票项目的时候,将ip地址处理后用int ...
- Python--day29--logging模块(日志模块)
重要程度六颗星,比如一个小窗口的广告如果因为你没有日志的问题导致点击量没有记录下来,几十分钟那就会损失几十万了,这责任谁负得起. 希望离开一个公司是因为有了更好的去处而不是因为各种各样的原因被开掉,那 ...
- 51nod1327 棋盘游戏
远古大坑 神仙DP状态设计题 https://blog.csdn.net/white_elephant/article/details/83592103 从行的角度入手,无论如何都要状压 每列最多放一 ...
- HDU 6709“Fishing Master”(贪心+优先级队列)
传送门 •参考资料 [1]:2019CCPC网络选拔赛 H.Fishing Master(思维+贪心) •题意 池塘里有 n 条鱼,捕捉一条鱼需要花费固定的 k 时间: 你有一个锅,每次只能煮一条鱼, ...
- 2019-5-21-NuGet-符号服务器
title author date CreateTime categories NuGet 符号服务器 lindexi 2019-05-21 11:34:40 +0800 2019-05-08 21: ...
- 原生js添加鼠标事件的兼容性写法
兼容pc和移动端,还兼容了surface平板. surface平板特别坑,既可以用鼠标也能用触摸屏,也就是说同时有touch事件和mouse事件. function addEvent(_target, ...