思路:

只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零!

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N = 100000+5;
const int MOD = 1000000007;
int dp[110][15][5]; //不知0,升1,降2,降升3
int a[N];
ll dfs(ll pos,int pre,int sta,bool limit,bool lead){
if(pos == -1) return lead? 0 : 1;
if(!limit && dp[pos][pre][sta] != -1) return dp[pos][pre][sta];
int top = limit? a[pos] : 9;
ll ret = 0;
int sta2;
for(int i = 0;i <= top;i++){
if(sta == 0){
if(lead) sta2 = 0;
else if(i > pre) sta2 = 1;
else if(i < pre) sta2 = 2;
else sta2 = 0;
}
else if(sta == 1){
if(i < pre) continue;
else sta2 = 1;
}
else if(sta == 2){
if(i > pre) sta2 = 3;
else sta2 = 2;
}
else if(sta == 3){
if(i >= pre) sta2 = 3;
else continue;
}
ret += dfs(pos-1,i,sta2,limit && i == top,lead && i == 0);
ret %= MOD;
}
ret %= MOD;
if(!limit && !lead) dp[pos][pre][sta] = ret; return ret;
}
int main(){
int T;
char s[105];
memset(dp,-1,sizeof(dp));
scanf("%d",&T);
while(T--){
scanf("%s",s);
int len = strlen(s),pos = 0;
for(int i = len - 1;i >=0 ;i--){
a[pos++] = s[i] - '0';
}
printf("%lld\n",dfs(pos-1,0,0,true,true));
}
return 0;
}

HDU 6148 Valley Numer (数位DP)题解的更多相关文章

  1. HDU 6148 Valley Numer (数位DP)

    题意:... 析:好久没写数位DP了,几乎就是不会了.... dp[i][last][s] 表示前 i 位上一位是 last,当前的状态是 s,0表示非上升,1 表示非下降,然后就很简单了,只有 0 ...

  2. 【HDU】6148 Valley Numer 数位DP

    [算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...

  3. 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】

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

  4. Kuangbin 带你飞 数位DP题解

    以前一直不知道该咋搞这个比较好. 感觉推起来那个数字好麻烦.后来有一种比较好的写法就是直接的DFS写法.相应的ismax表示当前位是否有限制. 数位DP也是有一种类似模版的东西,不过需要好好理解.与其 ...

  5. HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...

  6. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  7. HDU 5179 beautiful number 数位dp

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  8. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  9. HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛

    题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...

随机推荐

  1. 使用QT设计师-信号和槽signal-slot(第一弹)

    自定义信号和槽的步骤: 1.定义信号---signal1 = pyqtSignal() 2.定义槽信号---def setSlot(self): 3.连接信号和槽函数---signal1.connec ...

  2. mysql 数据备份与恢复

    1.mysql的备份 命令:"mysqldump -u root -p 数据库名 [表名] > 备份文件名" 不写表名默认备份所有整个数据库. 注意:备份的文件中没有创建数据 ...

  3. 如何控制dedecms描述的长度?

    我们都知道调用dedecms的标题长度可以用titlelen='字符数',{dede:arclist titlelen='10'},表示标题长度为10个字符,也即是5个汉字.如果想要控制描述的调用长度 ...

  4. Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表

    Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表 列表如下 Port Protocol Network Service System Service System Servic ...

  5. MYSQL中的BlackHole引擎

    MYSQL中的BlackHole引擎 http://blog.csdn.net/ylspirit/article/details/7234021 http://blog.chinaunix.net/u ...

  6. spring boot集成shrio用于权限控制

    下面是一个简单的springBoot集成shrio的项目,技术是:spring boot+idea+gradle+shrio+mybatis 1:首先在build.gradle中导入依赖 builds ...

  7. Andrew Ng-ML-第十五章-降维

    1.数据压缩 数据压缩不仅能够减小存储空间,并且能够加速学习算法.那么什么是数据压缩呢?下面给出了一个简单的例子: 图1.数据压缩的概念 举了两个例子,一个是横轴x1是厘米,纵轴特征x2是英尺,这明显 ...

  8. IDA 7.0在Mojava更新后打不开的问题

    Mac升级到mojava后,ida 7.0打不开了. 上述是两种典型的窗口,不过不论是出现什么样的弹窗,如果是在升级之后出现的,都要试一下下面的解决办法.因为IDA7.0版本流出的比较多,虽然这个已经 ...

  9. php分层

    表示层         UI      主要表示WEB方式,也可以表示成WINFORM方式.如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务. 业务逻辑层  BLL     ...

  10. windows系统和进程内存基础知识