Valley Numer

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 915    Accepted Submission(s): 482

Problem Description
众所周知,度度熊非常喜欢数字。

它最近发明了一种新的数字:Valley Number,像山谷一样的数字。

当一个数字,从左到右依次看过去数字没有出现先递增接着递减的“山峰”现象,就被称作 Valley Number。它可以递增,也可以递减,还可以先递减再递增。在递增或递减的过程中可以出现相等的情况。

比如,1,10,12,212,32122都是 Valley Number。

121,12331,21212则不是。

度度熊想知道不大于N的Valley Number数有多少。

注意,前导0是不合法的。

Input
第一行为T,表示输入数据组数。

每组数据包含一个数N。

● 1≤T≤200

● 1≤length(N)≤100

Output
对每组数据输出不大于N的Valley Number个数,结果对 1 000 000 007 取模。
Sample Input
3314120
Sample Output
314119
Source
2017百度之星程序设计大赛 - 复赛
/**
题意:求解区间满足条件是Valley Number的数字的个数;
Valley Number define:
对于数字的数位来说,
递增
递减
递减再递增
递增或递减的过程中可以出现相等的情况因此我们可以找出4种状态
0:不增加 不递减的情况 也就是最开头的那种情况
1:递增 以后的状态只能是递增或者平
2:递减 以后的状态只能是平增或增
3:先递减后递增 出现的状态不然是先出现2  才会导致的3  以后的状态只能是3处理中间过程 减平增 减平 增平 直接处理为减增 减 增 的情况dp[len][digit][cas]:第len位前一位数字为digit下状态为cas的满足条件的个数
该题存在前导零的情况 仔细分析状态*/#include<bits/stdc++.h>
#define ll long long
using namespace std;const int  mod=1e9+7;
char num[200];ll dp[200][11][4];ll dfs(int len,int digit,int cas,bool end_flag,bool lead_zero) {if(!len) return 1;if(!end_flag&&dp[len][digit][cas]!=-1) return dp[len][digit][cas];int maxx=end_flag?num[len]-'0':9;ll ans=0;for(int i=0;i<=maxx;i++) {if(lead_zero) ans=(ans+dfs(len-1,i,0,end_flag&&i==maxx,i==0&&lead_zero))%mod;else if(cas==0){int Cas=0;if(i>digit) Cas=2;else if(i<digit) Cas=1;ans=(ans+dfs(len-1,i,Cas,end_flag&&i==maxx,i==0&&lead_zero))%mod;}else if(cas==1){int Cas=cas;if(i>digit) Cas=3;ans=(ans+dfs(len-1,i,Cas,end_flag&&i==maxx,i==0&&lead_zero))%mod;}else if(cas==2||cas==3){if(i<digit) continue;ans=(ans+dfs(len-1,i,cas,end_flag&&i==maxx,i==0&&lead_zero))%mod;}}if(!end_flag) dp[len][digit][cas]=ans;return ans;
}void solve(){int t;scanf("%d",&t);memset(dp,-1,sizeof(dp));while(t--){scanf("%s",num+1);int len=strlen(num+1);reverse(num+1,num+1+len);printf("%lld\n",dfs(len,0,0,true,true)-1);}
}int main(){solve();return 0;
}

HDU 6148 Valley Numer(数位DP)相关推荐

  1. HDU 6148 Valley Numer [数位dp]

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

  2. 题解HDU6148 Valley Numer(数位DP+深搜DFS)

    题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...

  3. HDU 6148 Valley Numer (数位dp)

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

  4. HDU 6148 - Valley Numer(数位DP)

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  5. HDU 6148 Valley Numer

    写了多天一直被打断的数位dp,终于写完了(丧) #include<bits/stdc++.h> using namespace std; typedef long long ll; con ...

  6. HDU 6148 Valley Numer (数位DP)题解

    思路: 只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零! 代码: #include<cstdio> #include<cstring> #include&l ...

  7. hdu 6149 Valley Numer II(01背包套状压dp)

    题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...

  8. HDU 6156 Palindrome Function 数位DP

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

  9. Hdu 2089-不要62 数位dp

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

最新文章

  1. makefile .phony targets
  2. CodeBlocks主题和字体
  3. Tomcat绿色版启动startup.bat一闪问题的解决方法!
  4. 修改RAC VIP IP
  5. JSON学习笔记(五)- JSON.stringify()
  6. BGP——路由抖动惩罚机制(讲解+配置)
  7. 基于SMB文件共享传播的新型蠕虫病毒***的紧急防范
  8. 华为鸿蒙联合品牌,魅族官宣:接入华为鸿蒙!这是国产智能手机品牌的首个公开表态!...
  9. 关于SOA的应用研究思考
  10. 基于JavaSwing+MySql的学生信息管理系统
  11. android dagger2 讲解,用Dagger2在Android中实现依赖注入
  12. powerdns 安装部署备忘
  13. 关于windows10在学习爬虫是用到appium配置java的jdk出现了,javac不是内部命令的解决方法(¥57)
  14. 群晖 Docker Gitlab 安装 及 https配置
  15. bat使用命令解析-详细(转)
  16. httpc服务器错误类型大全
  17. 隐私泄露中的人性剖析
  18. java int溢出,结果只会保留低32位,高位会抛弃掉
  19. 云南师范大学计算机考研资料汇总
  20. Pytorch Note 快乐星球

热门文章

  1. 读《平凡的世界》读路遥笔下的秀莲
  2. java和jdbc操作数据库MySQL
  3. Linux服务器git clone卡住不动
  4. Flask项目之手机端租房网站的实战开发(一)
  5. 数字功放音质好不好?从哪些地方看
  6. win10系统excel2019快速实现间隔行填充颜色快捷键的方法
  7. Qt ‘tr‘ was not declared in this scop
  8. HTML5,CSS3,js
  9. 中国人的英文名和外国人的中文名
  10. python运用在大数据_python 大数据 应用场景