【链接】http://acm.hdu.edu.cn/showproblem.php?pid=6148


【题意】


在这里写题意

【题解】


先把1..N里面的山峰数字个数算出来->x
然后用N减去这个x就好;
这类的DP用记忆化搜索写比较好写.
参数存是否上升过,是否下降过,以及是否能枚举到9就好了.
只要出现从某一位开始能够每一位都枚举到9了.
则剩余的数字,每一位都能枚举到9;
且它的方案只有up,down,前一个数字是什么,剩余的需要枚举量这几个东西决定.
且都是固定的,通用的方案数.

【错的次数】


0

【反思】


在这了写反思

【代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define os(x) printf(x)
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 100;
const LL MOD = 1e9+7; int T,a[N+10],len,temp[N+10];
LL dp[10][N+10][2][2];
char s[N+10]; LL dfs(int start,int cur,bool up,bool down,bool xiao){
    if (cur > len) return (up&&down);
    int imax = xiao?9:a[cur];
    if (start!=cur && xiao && dp[temp[cur-1]][len-cur+1][up][down]!=-1)
        return dp[temp[cur-1]][len-cur+1][up][down];
    LL ret = 0;
    rep1(i,0,imax){
        temp[cur] = i;
        bool ju = xiao || (i < imax);
        if (i==0 && start==cur)
            ret = (ret + dfs(start+1,cur+1,up,down,ju))%MOD;
        else{
            if (start==cur){
                ret = (ret + dfs(start,cur+1,up,down,ju))%MOD;
            }else {
                if (up && down){
                    ret = (ret + dfs(start,cur+1,up,down,ju))%MOD;
                }else{
                    if (temp[cur]==temp[cur-1]){
                        ret = (ret + dfs(start,cur+1,up,down,ju))%MOD;
                    }
                    if (temp[cur] > temp[cur-1]){
                        ret = (ret + dfs(start,cur+1,1,0,ju))%MOD;
                    }
                    if (temp[cur] < temp[cur-1]){
                        ret = (ret + dfs(start,cur+1,up,1,ju))%MOD;
                    }
                }
            }
        }
    }
    if (start != cur && xiao)
        dp[temp[cur-1]][len-cur+1][up][down] = ret;
    return ret;
} int main(){
    //Open();
    //Close();
    ms(dp,255);
    ri(T);
    while (T--){
        LL init = 0;
        rs(s);
        len = strlen(s);
        rep1(i,0,len-1)
            a[i+1] = s[i]-'0';
        rep1(i,1,len)
            init = (init*10+a[i])%MOD;
        ol((init-dfs(1,1,0,0,0)+MOD)%MOD);puts("");
    }
    return 0;
}

【2017百度之星程序设计大赛 - 复赛】Valley Numer的更多相关文章

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

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

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

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

  3. 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】

    Pokémon GO Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 2017"百度之星"程序设计大赛 - 复赛1001&&HDU 6144 Arithmetic of Bomb【java大模拟】

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

  5. [SinGuLaRiTy] 2017 百度之星程序设计大赛 复赛

    [SinGuLaRiTy-1038] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Arithmetic of Bomb Problem D ...

  6. 2017"百度之星"程序设计大赛 - 复赛

    Arithmetic of Bomb  Accepts: 1050  Submissions: 1762  Time Limit: 2000/1000 MS (Java/Others)  Memory ...

  7. 2017百度之星程序设计大赛 - 复赛 Arithmetic of Bomb

    http://acm.hdu.edu.cn/showproblem.php?pid=6144 解法:一个简单的模拟 #include <bits/stdc++.h> using names ...

  8. 【2017"百度之星"程序设计大赛 - 复赛】Arithmetic of Bomb

    [链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=777&pid=1001 [题意] 在这里写 [题解] ...

  9. HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. linux(debian/ubuntu)下连接安卓手机--小米4为例

    更改:如今小米连接Ubuntu等Linux系统,直接改动手机上的连接方式就可以. --------------------------------------------- 因为安卓手机底层就是lin ...

  2. BZOJ 2836 树链剖分+线段树

    思路: 链剖+线段树裸题 重链的标号就是DFS序 所以查子树的时候每回就 query(change[x],change[x]+size[x]-1) 就好了 剩下的应该都会吧.. //By Sirius ...

  3. Flex 最全的换行,制表符,回车,空格......特殊符号

    字符 十进制字符编号 实体名字 说明 — &#; — 未使用Unused — &#; — 未使用Unused — &#; — 未使用Unused — &#; — 未使用 ...

  4. Scrapy框架使用代理

    使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...

  5. Chrome OS 70 发布:这是安卓的私生子吗?

    谷歌于28日正式宣布推出Chrome OS 70.这个最新的Chrome OS系统在一些设计上具备了更多安卓风味,为配备了触摸屏的Chromebook.平板电脑和二合一设备带来了操作界面改善. 据9t ...

  6. HTTP 413报错

    在php中通过flash上传文件到服务器端时报413错误,原来一直以为是php.ini配置的问题,但是检查了php.ini的配置以后,发现不是php.ini的问题,最后是通过Http Analyzer ...

  7. linux 查看tomcat 实时日志

    进入tomcat下logs文件夹下,若没有Catalina.out文件先去启动服务在回到logs文件夹输入 tail -f catalina.out ,可看到实时日志

  8. C++11 volatile 类型

    volatile作用: 作为指令关键字,确保本条指令不会受到编译器的优化而省略,而且要求每次直接读值. 定义: volatile int nTest; volatile关键字是一种类型修饰符,用它声明 ...

  9. 如何形象的解释 webhook 这个词

    就是一个 callback,只不过 callback 的操作是发送指定的 HTTP request 给一个指定的地址. callback 就是由甲传给乙,乙处理完之后通知甲传过来的方法或者请求甲方的 ...

  10. 洛谷 P1964 【mc生存】卖东西

    P1964 [mc生存]卖东西 题目背景 服务器好好玩 题目描述 lcy0x1去服务器的系统商店卖东西. 一个人的背包有21格. 一开始他的背包里有m件不同的物品(不能卖). 他要卖n种物品,每种物品 ...