[SCOI2009]windy数 代码 (对应数位dp入门)
Code1 (DP版)
#include<bits/stdc++.h>
#define in(i) (i=read())
using namespace std;
int read()
{
int ans=0,f=1;
char i=getchar();
while(i<'0' || i>'9') {
if(i=='-') f=-1;
i=getchar();
}
while(i>='0' && i<='9') {
ans=(ans<<1)+(ans<<3)+i-'0';
i=getchar();
}return ans*f;
}
int dp[12][10],bit[10];
void init()
{
for(int i=0;i<=9;i++) dp[1][i]=1;
for(int i=2;i<=10;i++) {
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
if(abs(j-k)>=2) dp[i][j]+=dp[i-1][k];
}
}
int solve(int x)
{
if(x==0) return 0; int ans=0,len=0;
memset(bit,0,sizeof(bit));
while(x) {
bit[++len]=x%10;
x/=10;
}
for(int i=1;i<=len-1;i++)
for(int j=1;j<=9;j++)
ans+=dp[i][j];
for(int i=1;i<bit[len];i++) ans+=dp[len][i];
for(int i=len-1;i>=1;i--) {
for(int j=0;j<bit[i];j++)
if(abs(bit[i+1]-j)>=2) ans+=dp[i][j];
if(abs(bit[i+1]-bit[i])<2) break;
if(i==1) ans++;
}return ans;
}
int main()
{
init(); int a,b;
in(a);in(b);
cout<<solve(b)-solve(a-1)<<endl;
}
Code2(记忆化搜索版)
#include<bits/stdc++.h>
#define in(i) (i=read())
using namespace std;
int read()
{
int ans=0,f=1;
char i=getchar();
while(i<'0' || i>'9') {
if(i=='-') f=-1;
i=getchar();
}
while(i>='0' && i<='9') {
ans=(ans<<1)+(ans<<3)+i-'0';
i=getchar();
}return ans*f;
}
int bit[11], dp[11][10];
int dfs(int len,int pre,int f,int limit)
{
int ans=0;
if(!len) return 1;
if(!limit && f && dp[len][pre]) return dp[len][pre];
int maxn=limit?bit[len]:9;
for(int i=0;i<=maxn;i++)
{
if(abs(i-pre)>=2) {
int p=i;
if(pre==-10 && !i) p=pre;
ans+=dfs(len-1,p,f||i!=0,limit && i==maxn);
}
}
if(!limit && f) dp[len][pre]=ans;
return ans;
}
int solve(int a)
{
memset(bit,0,sizeof(bit));
int k=0;
while(a) {
bit[++k]=a%10;
a/=10;
}return dfs(k,-10,0,1);
}
int main()
{
int a,b;
in(a);in(b);
cout<<solve(b)-solve(a-1)<<endl;
return 0;
}
[SCOI2009]windy数 代码 (对应数位dp入门)的更多相关文章
- [BZOJ1026][SCOI2009]windy数 解题报告|数位dp
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...
- 数位dp入门(内容一样,新版格式)
顾名思义,数位dp,是一种用来计数的dp,就是把一个数字拆成一个一个数位去统计 如果现在给你一道题,需要你求在区间[l,r]内满足条件的解的个数,我们很容易想到去暴力枚举,但要是数据范围太大这种办法就 ...
- bzoj 1026 [SCOI2009]windy数 数位dp
1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- bzoj 1026 [SCOI2009]windy数(数位DP)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4550 Solved: 2039[Submit][Sta ...
- BZOJ_1026_[SCOI2009]windy数_数位DP
BZOJ_1026_[SCOI2009]windy数_数位DP 题意:windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之 ...
- bzoj1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8203 Solved: 3687[Submit][Sta ...
- luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索
题目链接 luogu P2657 [SCOI2009]windy数 题解 我有了一种所有数位dp都能用记忆话搜索水的错觉 代码 #include<cstdio> #include<a ...
- 2018.06.30 BZOJ1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Description windy定义了一种windy数.不含前导零且相邻两 ...
- [bzoj1026][SCOI2009]windy数——数位dp
题目 求[a,b]中的windy数个数. windy数指的是任意相邻两个数位上的数至少相差2的数,比如135是,134不是. 题解 感觉这个题比刚才做的那个简单多了...这个才真的应该是数位dp入门题 ...
随机推荐
- Scalar Queries CodeForces - 1167F (计数,树状数组)
You are given an array $a_1,a_2,…,a_n$. All $a_i$ are pairwise distinct. Let's define function $f(l, ...
- C# Reflection exception Method not found
C# Reflection exception Method not found Ok I figured it out. The server has Microsft .NET 4.0 insta ...
- luogu题解 P3709 【大爷的字符串题】
题目链接: https://www.luogu.org/problemnew/show/P3709 思路: 首先我是没读懂题目的,浏览了讨论区的dalao发现才知道就是求区间众数的出现次数. 然后肯定 ...
- Java 串口通信 Ubuntu
说一下我的操作过程吧 在Windows上先用阿猫串口网络调试助手,进行调试: 在网上找Java代码,我选择的是RXTXcomm,网上代码很多,基本都一样. 在Windows电脑上把rxtx压缩包中的r ...
- mybatis-plus使用Oracle函数生成主键
函数的调用方式为: select pkg1.fun1 from dual; mybatis-plus一般会使用的主键生成策略为: @Bean public OracleKeyGenerator ora ...
- Linux JDK升级
一.jdk1.4卸载 Redhat Enterprise 5 中自带安装了jdk1.4,在安装jdk1.6前,把jdk1.4卸载: 1. 首先查看系统自带的JDK版本: [root@linux ~]# ...
- git、github常用操作
1.将github项目拷贝到本地 $ git clone https://github.com/jim2500/miaosha_project.git 2.修改本地项目上传到github T470s@ ...
- input框blur事件 ie问题
在chrome和firefox里会返回 在ie却获取不到relatedTarget:可以通过document.activeElement获取到点击到哪个标签 注意document.activeElem ...
- Sublime Text 3:自定义语法高亮
(http://ilkinulas.github.io/programming/2016/02/05/sublime-text-syntax-highlighting.html) 要安装"P ...
- Redis教程(REmote DIctionary Server)——一个高性能的key-value数据库
redis(REmote DIctionary Server)是什么? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...