bzoj1026: [SCOI2009]windy数 数位dp
来源:互联网 发布:淘宝详情页上面 编辑:程序博客网 时间:2024/06/05 13:33
题目:
http://www.lydsy.com/JudgeOnline/problem.php?id=1026
题意:
Description
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,
在A和B之间,包括A和B,总共有多少个windy数?
Input
包含两个整数,A B。
Output
一个整数
思路:
数位dp,记忆化搜索。
#include <bits/stdc++.h>using namespace std;const int N = 30 + 10;int dp[N][10];//定义dp[i][j]为第i位前驱数字为j时的方案数,注意前驱要合法int dig[N];int tot = 0;int dfs(int pos, int pre, bool f, bool limit){//f用来标记是否有合法前驱 if(pos < 1) return 1; if(!limit && f && dp[pos][pre] != -1) return dp[pos][pre]; int en = limit ? dig[pos] : 9; int ans = 0; for(int i = 0; i <= en; i++) if(! f) ans += dfs(pos-1, i, f || i != 0, limit && i == en); else if(abs(i - pre) >= 2) ans += dfs(pos-1, i, f || i != 0, limit && i == en); if(! limit && f) dp[pos][pre] = ans; return ans;}int work(int n){ int tn = n; tot = 0; while(tn) dig[++tot] = tn % 10, tn /= 10; memset(dp, -1, sizeof dp); return dfs(tot, 0, 0, 1);}int main(){ int n, m; while(~ scanf("%d%d", &n, &m)) printf("%d\n", work(m) - work(n-1)); return 0;}
阅读全文
0 0
- bzoj1026 [SCOI2009]windy数 数位dp
- bzoj1026: [SCOI2009]windy数 [简单数位dp]
- [BZOJ1026][SCOI2009]windy数 && 数位DP
- bzoj1026: [SCOI2009]windy数 数位dp
- bzoj1026: [SCOI2009]windy数 数位dp
- BZOJ1026 [SCOI2009]windy数(数位dp)
- [BZOJ1026]SCOI2009 windy数|数位DP
- 【BZOJ1026】【SCOI2009】windy数 数位DP
- 【bzoj1026】【SCOI2009】【windy数】【数位dp】
- 【数位DP】bzoj1026: [SCOI2009]windy数
- 【BZOJ1026】[SCOI2009]windy数【数位DP】
- bzoj1026: [SCOI2009]windy数-数位DP
- [SCOI2009] [BZOJ1026] Windy数 - 数位DP
- bzoj1026 [SCOI2009]windy数 数位DP
- 【bzoj1026】[SCOI2009]windy数 数位DP
- [BZOJ1026][SCOI2009]windy数(数位dp)
- bzoj1026 [SCOI2009]windy数(数位dp)
- bzoj1026[SCOI2009]windy数 【数位dp】
- javax.imageio.IIOException: Can't create output stream!tomcat 验证码,图片(原理)
- UG C#调用宏(macro)文件
- liunx系统配置同时运行多个tomcat
- 999-eclipse-occurences-02
- MySQL数据高级查询之连接查询、联合查询、子查询
- bzoj1026: [SCOI2009]windy数 数位dp
- java生成复杂嵌套Json
- php 实现进制相互转换
- C++学习笔记(10)-信号处理&多线程
- window安装解压版MySQL
- SVM的传奇故事——SVM知识点总结
- web学习引索
- Qt调用Halcon13.0机器视觉算法包
- 咪咕天气总结