数位DP --Windy数
满足一下条件的数字称为windy数
不考虑前导0,所有相邻的两个数字的差至少为2。
求出任意区间内的所有windy数
思路:dp[i][j]表示所有长度为 i 的数字以 j 开头的windy数的个数。0<=j<=9
仔细考虑前导0 的影响,已注释在代码中
#include<iostream>
#include<cstring>
#include<cstdio>
#define bug
using namespace std;
const int MAXN = 20;
template<typename T>
T oabs(T a){return a<0?-a:a;}
int dp[MAXN][10];
//dp[i][j] 表示长度为i的所有数字以j开头的windy数字的个数
int a,b;
bool init()
{if(scanf("%d%d",&a,&b)==EOF)return false;return true;
}
void DP_init()
{memset(dp,0,sizeof(dp));int tar = 0;for(int i=0;i<10;i++)dp[1][i]=1;for(int i=2;i<MAXN;i++){//如果前导为0,可以看做这一位不存在,加上后一位所有的数字开头的windy数个数for(int j=0;j<10;j++)dp[i][0]+=dp[i-1][j];for(int j=1;j<10;j++){tar = j+2;if(tar<10){for(int k=tar;k<10;k++)dp[i][j]+=dp[i-1][k];}tar=j-2;if(tar>=0){for(int k=tar;k>=0;k--){dp[i][j]+=dp[i-1][k];if(k==0){//此时由于前一位不为0,所以此时的前导0不可以当做0这一位不存在,所以减去多加上两个数//表示这个trick找了好久,T_Tdp[i][j]-=dp[i-2][0]+dp[i-2][1];}}}}}
}
int num[MAXN],len;
int solve(int n)
{len = 1;while(n){num[len++]=n%10;n/=10;}num[len]=20;len--;int res =0;for(int i=len;i;i--){for(int j =0;j<num[i];j++){if(oabs(num[i+1]-j)<2)continue;res+=dp[i][j];if(j==0&&i!=len){res-=dp[i-1][0]+dp[i-1][1];}} if(oabs(num[i]-num[i+1])<2)break;}return res;
}
int main()
{DP_init();while(init()){printf("%d\n",solve(b+1)-solve(a));}return 0;
}
数位DP --Windy数相关推荐
- Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献
传送门 文章目录 题意: 思路: 题意: 定义S(k)S(k)S(k)为将kkk的每一位拿出来从小到大排序后构成的数,比如S(3421)=1234S(3421)=1234S(3421)=1234,求S ...
- bzoj 1026: [SCOI2009]windy数 数位DP算法笔记
数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...
- uestc 250 windy数(数位dp)
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路:数位dp #include<iostream ...
- 【bzoj1026】[SCOI2009]windy数 数位dp
题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...
- BZOJ1026 [SCOI2009]windy数 数位dp
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1026 题目概括 求区间[A,B]中有多少数满足下面的条件. 条件:该数相邻两位之差不小于2. 题解 ...
- 【BZOJ1026】windy数,数位DP
Time:2016.08.14 Author:xiaoyimi 转载注明出处谢谢 思路: 依旧蛋疼的数位DP f[i][j]表示有i位,且最高位为j的windy数个数 转移方程比较好写 关键是具体求值 ...
- 洛谷2657 windy数(数位DP)
传送门 [题目分析] 数位DP经典题了. 考虑直接统计R内的windy数和L-1内的windy数,两者相减即为L~R之间的windy数. 考虑DP,记录当前位以及上一位所填的数,当前是否前面为前导零, ...
- AcWing1083. Windy数(数位DP)题解
题目传送门 题目描述 Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数. Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共 ...
- bzoj 1026: [SCOI2009]windy数(数位dp)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 7688 Solved: 3470 [Submit][S ...
最新文章
- 树莓派修改密码(有单独屏幕)
- 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
- 一个完整的iOS开发框架(Frameworks)-NimbusKit
- python小程序源代码-Python小项目:开发一个动态时钟小程序(附源码)
- SAAS,象B2C那样的B2B分销系统
- TypeScript constructor signature 类型的变量赋值方式
- HTTP1.1中CHUNKED编码解析(转载)
- PyTorch载入图片后ToTensor解读(含PIL和OpenCV读取图片对比)
- SpringBoot中的异步操作与线程池
- photon 服务器操作系统,photon 云服务器
- 在springBoot项目中使用activiti
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
- Process Simulate
- win10 桌面背景最短切换时间由1分钟改为10秒
- angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
- 由于应用universal link 校验不通过 ios应用升级SDK 更换Universal Links校验
- 东南大学计算机技术935专业考研经验分享
- 显示thread 1:signal SIGABRT 错误
- AI研习丨专题:面向防疫的5G巡检机器人技术与应用
- FreeMind:简单粗暴完成一份思维导图