_bzoj1026 [SCOI2009]windy数【数位dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1026
数位dp果断记忆化搜索,代码量少~ 程序里我用11代表前导零。
#include <cstdio>
#include <cstring> int A, B, f[15][15][2], a[15], wei; inline int abs(int aa) {
return aa > 0? aa: -aa;
}
int dp(int left, int now, char jin) {
if (f[left][now][jin] != -1) {
return f[left][now][jin];
}
if (!left) {
return f[left][now][jin] = 1;
}
int & rhs = f[left][now][jin];
rhs = 0;
if (jin) {
if (abs(a[left] - now) >= 2) {
rhs += dp(left - 1, a[left], 1);
}
for (int i = 0; i < a[left]; ++i) {
if (abs(i - now) >= 2) {
rhs += dp(left - 1, i, 0);
}
}
}
else if (now == 11) {
rhs += dp(left - 1, 11, 0);
for (int i = 1; i < 10; ++i) {
rhs += dp(left - 1, i, 0);
}
}
else {
for (int i = 0; i < 10; ++i) {
if (abs(i - now) >= 2) {
rhs += dp(left - 1, i, 0);
}
}
}
return rhs;
} inline int slove(int n) {
if (n < 10) {
return n + 1;
}
wei = 0;
while (n) {
a[++wei] = n % 10;
n /= 10;
}
memset(f, -1, sizeof f);
int rt = dp(wei - 1, 11, 0);
for (int i = 1; i < a[wei]; ++i) {
rt += dp(wei - 1, i, 0);
}
rt += dp(wei - 1, a[wei], 1);
return rt;
} int main(void) {
scanf("%d%d", &A, &B);
printf("%d\n", slove(B) - slove(A - 1));
return 0;
}
_bzoj1026 [SCOI2009]windy数【数位dp】的更多相关文章
- bzoj 1026 [SCOI2009]windy数 数位dp
1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索
题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...
- BZOJ1026: [SCOI2009]windy数[数位DP]
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6346 Solved: 2831[Submit][Sta ...
- 洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]
题目传送门 windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个win ...
- 【bzoj1026】[SCOI2009]windy数 数位dp
题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...
- [bzoj1026][SCOI2009]windy数——数位dp
题目 求[a,b]中的windy数个数. windy数指的是任意相邻两个数位上的数至少相差2的数,比如135是,134不是. 题解 感觉这个题比刚才做的那个简单多了...这个才真的应该是数位dp入门题 ...
- P2657 [SCOI2009]windy数 数位dp
数位dp之前完全没接触过,所以NOIP之前搞一下.数位dp就是一种dp,emm……用来求解区间[L,R]内满足某个性质的数的个数,且这个性质与数的大小无关. 在这道题中,dp[i][j]代表考虑了i位 ...
- bzoj 1026 [ SCOI2009 ] windy数 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 蛮简单的数位DP,预处理 f[i][j] 表示 i 位数,以 j 开头的 windy ...
- bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记
数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...
- $SCOI2009\ windy$数 数位$dp$
\(Sol\) 数位\(dp\)常规套路题. \(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里 ...
随机推荐
- OpenWrt 安装python-sqlite3失败
https://dev.openwrt.org/ticket/12239 #12239 reopened defect Sqlite3 missing in python 汇报人: dgspai@- ...
- 九度OJ1004 Median
题目描写叙述: Given an increasing sequence S of N integers, the median is the number at the middle positio ...
- System.Diagnostics.Debug.WriteLine 在OutPut中无输出
TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out); Debug ...
- MySQL Study之--MySQL用户及权限管理
MySQL Study之--MySQL用户及权限管理 MySQLserver通过MySQL权限表来控制用户对数据库的訪问.MySQL权限表存放在mysql数据库里.由mysql_install ...
- MySQL基础笔记(三) 复杂查询
所谓复杂查询,指涉及多个表.具有嵌套等复杂结构的查询.这里简要介绍典型的几种复杂查询格式. 一.连接查询 连接是区别关系与非关系系统的最重要的标志.通过连接运算符可以实现多个表查询.连接查询主要包括内 ...
- iOS xmpp的使用
#import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...
- Web—CSS概述
一.概念: 它是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言 的一个子集)等文件样式的计算机语言. 二.特点: 1.实现网页内容与样式的分离 2.降低图形文件的 ...
- 初探swift语言的学习笔记十一(performSelector)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- PyTorch 60 分钟入门教程:数据并行处理
可选择:数据并行处理(文末有完整代码下载) 作者:Sung Kim 和 Jenny Kang 在这个教程中,我们将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多 ...
- 基于Servlet API 如何实现转向时不再地址栏中显示转向后的地址?
A:redirect() B:sendRedirect() C:forward() D:transform()