题意:中文题,求小于等于n的"山谷"数的个数

思路:数位dp,注意此题中状态转移与前导0有关即可。

代码:

#include<bits/stdc++.h>
using namespace std;
#define MEM(a,b) memset(a,b,sizeof(a))
#define bug puts("bug");
#define PB push_back
#define MP make_pair
#define X first
#define Y second
typedef unsigned long long ll;
typedef pair<int,int> pii;
const int maxn=1e5+10;
const int mod=1e9+7;
using namespace std;
ll f[200][20][2];
int len,a[105];
string str;
ll dfs(int p,int nu,int isup,int lim,int lead){if(p==str.size())return 1;if(!lead&&!lim&&f[p][nu][isup]!=-1)return f[p][nu][isup];ll ans=0;int up=lim?a[p]:9;for(int i=0;i<=up;i++){if(isup==0){if(i<=nu)ans=(ans+dfs(p+1,(lead&&i==0)?9:i,0,lim&&i==a[p],lead&&i==0))%mod;else ans=(ans+dfs(p+1,i,1,lim&&i==a[p],lead&&i==0))%mod;}else if(isup==1&&i>=nu)ans=(ans+dfs(p+1,i,1,lim&&i==a[p],lead&&i==0))%mod;}if(!lim&&!lead) return f[p][nu][isup]=ans%mod;return ans%mod;
}
int main(){int t;scanf("%d",&t);while(t--){cin>>str;for(int i=0;i<str.size();i++)a[i]=str[i]-'0';memset(f,-1,sizeof(f));ll ret=(dfs(0,9,0,1,1)-1LL+mod)%mod;cout<<ret<<endl;}return 0;
}

转载于:https://www.cnblogs.com/zhangxianlong/p/10672495.html

hdu 6148 数位dp相关推荐

  1. hdu 2089 数位dp入门

    HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...

  2. HDU 4352 数位dp + LIS(nlogn) + 状态压缩

    #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then carefully reading the entir ...

  3. HDU 6148 Valley Numer (数位dp)

    题意: 求区间内满足非波峰数的个数. 其中波峰 是  先上升 在 下降,  平滑不会影响前面的状态. 思路: 很明显数位dp 令dp[i][j][k] 表示  枚举到数的第i 位, 前一个数字是j   ...

  4. HDU 6148 Valley Numer [数位dp]

    题意:求出小于等于n的,满足三种情况的任意一种的数的个数: ①每个位数字,递增,如122 ②每个位数字,递减,如211 ③每个位数字,先递减,在递增,如121 题解:数位dp,记录三维,pos(枚举的 ...

  5. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  6. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  7. HDU 2089 不要62 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...

  8. 【数位DP】B-number(HDU 3652)

    B-number HDU 3652 题目大意: 有一个数n,求出1~n中含'13'且能被13整除的数有多少个 输入样例 13 100 200 1000 输出样例 1 1 2 2 解题思路: 用数位DP ...

  9. HDU 3555 Bomb (数位DP)

    数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数,它是按位来进行计数统计的,可以保存子状态,速度较快.数位dp做多了后,套路基本上都差不多,关键把要保存的状态给抽象出来,保存下 ...

最新文章

  1. 2021全国高校计算机能力挑战赛(初赛)C语言试题四
  2. linux shell 读取文件 笔记
  3. 介绍几个移动web app开发框架
  4. MySQL安装教程,包含所有平台(图解)
  5. windows和linux下的spice客户端使用方法
  6. html 简单 在线编辑器 ie ff,一款垃圾中的极品HTML编辑器(兼容IE OR FF)
  7. 漫步数理统计十五——两个随机变量的分布
  8. 页面指令JSP常见的指令有哪些?(面试必备)
  9. 定时任务时间表达式的规则
  10. 大话USB驱动之基础概念
  11. 1.1 波士顿房价预测
  12. AI把英语系新生吓退学?别急,我们从来都是那只懒蚂蚁
  13. java毕业生设计高考填报信息系统计算机源码+系统+mysql+调试部署+lw
  14. 如果你没有钱,没有能力,没有人脉,你就这样干!
  15. 编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现有百钱欲买百鸡,共有多少种买法?
  16. Android +kotlin Banner 轮播广告 获取后台数据
  17. 安卓实例开发录音应用!Android架构组件Room功能详解,面试真题解析
  18. Mac OS中隐藏和显示文件的操作
  19. curl命令详解 (实例使用方法)
  20. MATLAB 求圆形面积

热门文章

  1. 高效的沟通方式-会议
  2. PEP 0498 -- Literal String Interpolation 翻译(未完待续)
  3. Java Stream流的概念
  4. 启用新域名:ju690.com --聚了就灵的谐音
  5. .NET 2.0 CER学习笔记
  6. 谈mvc开发中gzip压缩的应用
  7. SpringMVC接收checkbox传值
  8. handler消息机制
  9. 替换RubyGems 镜像
  10. PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)...