Valley Numer

 Accepts: 548
 Submissions: 1125
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 32768/32768 K (Java/Others)

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
3
3
14
120

Sample Output
3
14
119

数位dp,dp[len][pre][up]表示当前到了第len位,上一位是pre,是否出现过递增的情况个数

#include<stdio.h>
#include<string.h>
#define mod 1000000007
#define LL long long
char pp[105];
LL str[105], temp[105], dp[105][12][105];
LL Sech(LL pos, LL pre, LL up, LL flag, LL k)
{LL u, i, ans;if(pos<0)return 1;if(flag==0 && k==0 && dp[pos][pre][up]!=-1)return dp[pos][pre][up];if(flag==1)  u = str[pos];else  u = 9;ans = 0;for(i=0;i<=u;i++){temp[pos] = i;if(k==1){ans += Sech(pos-1, i, 0, flag && i==u, k && (i==0));continue;}if(i==pre)ans += Sech(pos-1, i, up, flag && i==u, 0);else if(i<pre){if(up>0)continue;ans += Sech(pos-1, i, up, flag && i==u, 0);}else if(i>pre)ans += Sech(pos-1, i, up+1, flag && i==u, 0);}ans %= mod;if(flag==0 && k==0)dp[pos][pre][up] = ans;return ans;
}
int main(void)
{LL T, n, i;scanf("%I64d", &T);memset(dp, -1, sizeof(dp));while(T--){scanf("%s", pp+1);n = strlen(pp+1);for(i=n;i>=1;i--)str[i-1] = pp[n-i+1]-'0';printf("%I64d\n", ((Sech(n-1, 0, 0, 1, 1)-1+mod)%mod));}
}

2017百度之星复赛:1006. Valley Numer(数位DP)相关推荐

  1. 2017 百度之星 复赛 Valley Numer(数位dp)

    Valley Numer 数位dp,state标志前面若干位是否存在递增序列. 代码: #include <bits/stdc++.h> using namespace std;typed ...

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

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

  3. HDU 6148 Valley Numer(数位DP)

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

  4. 2017百度之星 复赛

    作为一只菜鸡,这可能是我OI生涯中最后一次打百度之星了,希望明年这个时候能不退役(虽然不大可能) 开始贴题解吧.会持续更新. 1001 Arithmetic of Bomb 煞笔模拟题,1A #inc ...

  5. 2017百度之星复赛:1003. Pokémon GO(递推)

    Pokémon GO  Accepts: 738  Submissions: 1725  Time Limit: 3000/1500 MS (Java/Others)  Memory Limit: 3 ...

  6. HDU 6148 Valley Numer [数位dp]

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

  7. 2017百度之星程序设计大赛 - 复赛 01,03,05

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. 2016百度之星复赛 1003 拍照 优先队列

    2016"百度之星" - 复赛(Astar Round3) Ended  2016-05-29 14:00:00 - 2016-05-29 17:00:00 Current Tim ...

  9. 2017百度之星总结

    2017百度之星总结 从陕西省赛回来之后就退役了,刚开始的时候很迷茫也很颓废,期末考也没有考好.因为我的某一些个人原因只能选择退队,很对不起johsnows和UMR,让他们两个独自去面对下半年的CCP ...

最新文章

  1. 决策树算法原理(ID3,C4.5)
  2. 使用Python+OpenCV进行图像处理之入门教程
  3. java文件读写不完整_Java读取文件内容不完整
  4. python读取xlsx文件pandas_python-如何使用iPython中的pandas库读取.xlsx文件?
  5. 使用DataGridView数据窗口控件,构建用户快速输入体验
  6. mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...
  7. [html] input上传文件可以同时选择多张吗?怎么设置?
  8. fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?
  9. Corn Fields(POJ-3254)
  10. [bzoj1500 维修数列](NOI2005) (splay)
  11. Django怎么配置mysql数据库_Django如何配置mysql数据库
  12. Android 使用SQLiteDatabase操作SQLite数据库(二)
  13. IDEA访问不到SpringBoot项目webapp下的内容
  14. DRBD安装编译后: modprobe drdb FATAL: Module drdb not found
  15. snownlp抛出错误_请教大家有关SnowNLP分词、词性标注、情感分析的问题
  16. 自然语言处理总复习(七)—— 概率上下文无关文法
  17. 解决浏览器 fakepath 实现图片上传预览
  18. python画图库哪个好_python常见的十种可视化图库方法展示
  19. SOLIDWORKS产品设计学习
  20. Js年龄计算,精确到岁、月、小时

热门文章

  1. python有什么用-python是什么意思?python有什么用?
  2. python从入门到精通需要多久-Python从入门到精通只需要一个月就够了!
  3. python下载哪个版本好-究竟哪个版本的Python是最快的?
  4. php获取用户当前坐标,web端定位:获取当前地理位置
  5. atxserver运行没有反应_关于厌氧反应器的酸化现象与恢复措施!
  6. 实现深拷贝的常用方法
  7. leetcode 35. 搜索插入位置(二分法搜索失败的情况)
  8. FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
  9. java mysql dump_mysql dump备份和恢复
  10. 《深入理解计算机系统》 CSAPP 入坑推荐