2017百度之星复赛:1006. Valley Numer(数位DP)
Valley Numer
众所周知,度度熊非常喜欢数字。
它最近发明了一种新的数字:Valley Number,像山谷一样的数字。
当一个数字,从左到右依次看过去数字没有出现先递增接着递减的“山峰”现象,就被称作 Valley Number。它可以递增,也可以递减,还可以先递减再递增。在递增或递减的过程中可以出现相等的情况。
比如,1,10,12,212,32122都是 Valley Number。
121,12331,21212则不是。
度度熊想知道不大于N的Valley Number数有多少。
注意,前导0是不合法的。
第一行为T,表示输入数据组数。
每组数据包含一个数N。
● 1≤T≤200
● 1≤length(N)≤100
对每组数据输出不大于N的Valley Number个数,结果对 1 000 000 007 取模。
3 3 14 120
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)相关推荐
- 2017 百度之星 复赛 Valley Numer(数位dp)
Valley Numer 数位dp,state标志前面若干位是否存在递增序列. 代码: #include <bits/stdc++.h> using namespace std;typed ...
- 题解HDU6148 Valley Numer(数位DP+深搜DFS)
题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...
- HDU 6148 Valley Numer(数位DP)
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 2017百度之星 复赛
作为一只菜鸡,这可能是我OI生涯中最后一次打百度之星了,希望明年这个时候能不退役(虽然不大可能) 开始贴题解吧.会持续更新. 1001 Arithmetic of Bomb 煞笔模拟题,1A #inc ...
- 2017百度之星复赛:1003. Pokémon GO(递推)
Pokémon GO Accepts: 738 Submissions: 1725 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 3 ...
- HDU 6148 Valley Numer [数位dp]
题意:求出小于等于n的,满足三种情况的任意一种的数的个数: ①每个位数字,递增,如122 ②每个位数字,递减,如211 ③每个位数字,先递减,在递增,如121 题解:数位dp,记录三维,pos(枚举的 ...
- 2017百度之星程序设计大赛 - 复赛 01,03,05
Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2016百度之星复赛 1003 拍照 优先队列
2016"百度之星" - 复赛(Astar Round3) Ended 2016-05-29 14:00:00 - 2016-05-29 17:00:00 Current Tim ...
- 2017百度之星总结
2017百度之星总结 从陕西省赛回来之后就退役了,刚开始的时候很迷茫也很颓废,期末考也没有考好.因为我的某一些个人原因只能选择退队,很对不起johsnows和UMR,让他们两个独自去面对下半年的CCP ...
最新文章
- 决策树算法原理(ID3,C4.5)
- 使用Python+OpenCV进行图像处理之入门教程
- java文件读写不完整_Java读取文件内容不完整
- python读取xlsx文件pandas_python-如何使用iPython中的pandas库读取.xlsx文件?
- 使用DataGridView数据窗口控件,构建用户快速输入体验
- mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...
- [html] input上传文件可以同时选择多张吗?怎么设置?
- fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?
- Corn Fields(POJ-3254)
- [bzoj1500 维修数列](NOI2005) (splay)
- Django怎么配置mysql数据库_Django如何配置mysql数据库
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- IDEA访问不到SpringBoot项目webapp下的内容
- DRBD安装编译后: modprobe drdb FATAL: Module drdb not found
- snownlp抛出错误_请教大家有关SnowNLP分词、词性标注、情感分析的问题
- 自然语言处理总复习(七)—— 概率上下文无关文法
- 解决浏览器 fakepath 实现图片上传预览
- python画图库哪个好_python常见的十种可视化图库方法展示
- SOLIDWORKS产品设计学习
- Js年龄计算,精确到岁、月、小时
热门文章
- python有什么用-python是什么意思?python有什么用?
- python从入门到精通需要多久-Python从入门到精通只需要一个月就够了!
- python下载哪个版本好-究竟哪个版本的Python是最快的?
- php获取用户当前坐标,web端定位:获取当前地理位置
- atxserver运行没有反应_关于厌氧反应器的酸化现象与恢复措施!
- 实现深拷贝的常用方法
- leetcode 35. 搜索插入位置(二分法搜索失败的情况)
- FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
- java mysql dump_mysql dump备份和恢复
- 《深入理解计算机系统》 CSAPP 入坑推荐