HYSBZ 1026: windy数(数位DP)
2024-09-06 16:00:39
类型:数位DP
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。问[A,B]之间windy数的个数。(1 <= A <= B <= 2000000000 )
思路:
设状态dp[i][d][preAllZero] 表示 d开头的i位数中,当其preAllZero(true 表示前面都是0)的时候,windy数的个数。
为什么有preAllZero这一个状态呢?因为,比如002这个数,如果前面都是0,则是可以的,但如果前面有一位不是0 ,则这两个0违反了windy数的规则,就不行。
转移就不写了。见程序就好。
坑:
没有设preAllZero这个状态,结果一直WA。最近发现老是考虑不完全,结合近两次的原因分析,均为有了思路写程序,写完或者写到一半发现某个地方想错了,然后打补丁,结果没打全,就出了漏洞。总结两点:1:先有清晰的思路,再上阵写程序,只会节省时间。(在纸上思考要时间,你以为敲代码的时候这部分时间就省了?反而是在纸上想完全,然后敲代码的时候就可以不用想了,快啊~~)2:万一敲完发现BUG,打完补丁还不对,最好推倒,重新整理思路,然后再去写(但也不是说要把程序删了重写,或许并没到这个地步,只是没想全而已~)
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int num[];
long long dp[][][]; long long dfs(int i, int d, bool preAllZero, bool isQuery) {
if (!isQuery && ~dp[i][d][preAllZero]) return dp[i][d][preAllZero];
if (i == ) {
return dp[i][d][preAllZero] = ;
}
int end = isQuery?num[i-]:;
long long ans = ;
for (int j = ; j <= end; j++) {
if (!preAllZero && abs(j-d)<=) continue;
ans += dfs(i-, j, preAllZero && j == , isQuery && j==end);
}
if (!isQuery) dp[i][d][preAllZero] = ans;
return ans;
} long long cal(int x) {
int len = ;
while (x) {
num[++len] = x%;
x/=;
}
return dfs(len+, , true, true);
} int main() {
int a, b;
memset(dp, -, sizeof(dp));
while (~scanf("%d%d", &a, &b)) {
printf("%lld\n", cal(b) - cal(a-));
}
return ;
}
最新文章
- Django调用JS、CSS、图片等静态文件
- [转]windows下和Ubuntu下adb找不到设备的解决方法
- svg学习(九)path
- HDOJ 4749 Parade Show
- 存储过程获取最后插入到数据表里面的ID
- 设置ASP.NET页面的运行超时时间详细到单个页面及站点
- onclick事件与onserverclick事件
- JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结
- vs 2013 编译zlib
- android 发送短信 怎样做到一条一条的发送,仅仅有在上一条发送成功之后才发送下一条短信
- EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean
- java文件处理之压缩,分割
- hdu1213 How Many Tables 并查集的简单应用
- Nginx实现负载均衡&;Nginx缓存功能
- 网友";就像一支烟";山寨币分析估值方法
- jQuery中的自定义插件之----工厂方法(Factory Widget)
- 用web技术写APP
- 简述我理解的C#
- CentOS安装Nginx Pre-Built
- MySQL Workbench常用快捷键
热门文章
- 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线
- [BZOJ] 1127: [POI2008]KUP
- Spring Boot 应用 快速发布到linux服务器的脚本代码示例
- shell 练习题 - 第三周
- 01windows常用命令及批处理
- [提供可行性脚本] RHEL 7/CentOS 7/Fedora28 重命名网卡名称
- spring boot yaml 自定义配置 映射到 java POJO
- golang 函数的特殊用法
- 下载旧版本的JDK
- BZOJ 5064: B-number