[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入门题 ...
随机推荐
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...
- X86逆向3:通过修改关键CALL破解
软件逆向第一课中我们通过爆破的方式直接破解了程序的登录限制,但这一种方式很不合理,因为你只是破解了登录这一处的验证,如果程序内部还有其他的验证那么你需要再次爆破第二个验证,显然这种方式是很烦人的,如果 ...
- 数值优化(Numerical Optimization)学习系列-目录
数值优化(Numerical Optimization)学习系列-目录 置顶 2015年12月27日 19:07:11 下一步 阅读数 12291更多 分类专栏: 数值优化 版权声明:本文为博主原 ...
- javascript——加强for循环 和Java中的加强for循环的区别
javascript中获得的是下标 in var id=[4,5,6]; for (var index in id) { console.log(id[index]); } Java中获得的 ...
- Navicat连接CentOS7中的MariaDB
Step 1:首先登录数据库设置开启远程连接 mysql -u root -p Step 2:使用改表法实现远程连接 use mysql; update user set host = '%' whe ...
- bus事件总线传值
import Vue from 'vue' var bus = new Vue() export default bus 监听事件: // header组件 <template> ...
- Angular 开发环境搭建
Angular 是一款开源 JavaScript 框架,由Google 维护,用来协助单一页面应用程序运行的.它的目标是增强基于浏览器的应用,使开发和测试变得更加容易.目前最新的 Angular 版本 ...
- netfilter/iptables全攻略
转:http://www.linuxso.com/linuxpeixun/10332.html 内容简介防火墙的概述iptables简介iptables基础iptables语法iptables实例案例 ...
- deep_learning_RNN序列模型
吴恩达<深度学习-序列模型>1 --循环序列模型:https://blog.csdn.net/weixin_41043240/article/details/79415134
- 3.Https服务器的配置
1.前言: 所谓区块链,简而言之就是一种数据结构,每一个区块都像账本的每一页纸记录了该网络上的交易信息,而众多区块在时间的基础上按照顺序连接起 来就形成了区块链.区块链能够以数字方式识别和跟踪交易,并 ...