HDU 6148 Valley Numer (数位DP)题解
思路:
只要把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)题解的更多相关文章
- HDU 6148 Valley Numer (数位DP)
		
题意:... 析:好久没写数位DP了,几乎就是不会了.... dp[i][last][s] 表示前 i 位上一位是 last,当前的状态是 s,0表示非上升,1 表示非下降,然后就很简单了,只有 0 ...
 - 【HDU】6148 Valley Numer 数位DP
		
[算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...
 - 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】
		
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
 - Kuangbin 带你飞 数位DP题解
		
以前一直不知道该咋搞这个比较好. 感觉推起来那个数字好麻烦.后来有一种比较好的写法就是直接的DFS写法.相应的ismax表示当前位是否有限制. 数位DP也是有一种类似模版的东西,不过需要好好理解.与其 ...
 - HDU 6156 - Palindrome Function [ 数位DP ]  |  2017 中国大学生程序设计竞赛 - 网络选拔赛
		
普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...
 - HDU 2089 - 不要62 - [数位DP][入门题]
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
 - HDU 5179 beautiful number 数位dp
		
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
 - hdu 5898 odd-even number 数位DP
		
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
 - HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
		
题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...
 
随机推荐
- AspNetPager使用方法
			
一.AspNetPager支持两种方式分页: 一种是PostBack方式分页, 一种是通过Url来实现分页以及Url重写功能 二.AspNetPager支持各种数据绑定控件GridView.DataG ...
 - mysql 数据表操作 存储引擎介绍
			
一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...
 - 开源的挖矿软件,sha256
			
http://cryptomining-blog.com/tag/sha-256d-miner/ https://github.com/cbuchner1/CudaMiner/blob/master/ ...
 - windows 环境下安装elasticsearch ,ik,head,marvel
			
elasticsearch 自带的中分分词器将会使中文分成一个一个的单词,需要安装ik分词等,ik分词分为 ik_smart(粗粒度分词),ik_max_word(细粒度分词)两种模式. 1:首先安 ...
 - [js]js中原型的继承
			
js继承01 思路: 单例/工厂/构造函数--演进到原型 搞清原型结构 原型继承 模拟系统原型继承 实现自己的继承 观察原型继承特点 演进到原型链这一步 //单例模式: 防止变量名冲突: // 思路: ...
 - 设置pip的默认源
			
Python在导入第三方模块的时候用设置豆瓣源的方法提高效率,每次设置很麻烦,所以通过下面方法设置默认源,这样就可以直接pip install package,而不用指定源了. [global] ti ...
 - 【Cocos2dx 3.x Lua】CCParallaxNode使用
			
我们知道,当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差,而在游戏中模仿视差,可以让玩家感觉到游戏中的角 ...
 - python+requests接口自动化完整项目设计源码(一)
			
原文地址https://www.cnblogs.com/yoyoketang/tag/python接口自动化/ 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址 ...
 - python 读取配置文件总是报错 configparser.NoSectionError: No section:
			
本文为作者原创,禁止转载,违者必究法律责任!!! python 读取配置文件总是报错 configparser.NoSectionError: No section: 无论是 python2的版本,还 ...
 - 【环境变量】删掉centos原有的openjdk并安装sun jdk
			
一.卸载原有openjdk rpm -qa | grep java 之后,将展示出来的全部卸载掉,我这里是5个 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111 ...