【链接】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打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  2. Create the Project

    https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspn ...

  3. Json 序列化以及反序列化的三种方式(二)

    1.什么是JSON? Json[javascript对象表示方法],它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的 2.Json支持下 ...

  4. Flex4之事件详解

    第一.Flex事件简介 事件贯穿于Flex应用开发的全过程.事件是ActionScript .0中最重要的部分之一,也是Flex应用程序开发的核心基础.本章将在DOM 3的基础上详细讲解ActionS ...

  5. GPU流水线

    起点: 是一个三维模型,由顶点(vertices)构成.顶点列表中的每个顶点是三维坐标系中的坐标,并带有颜色信息.顶点列表(point list)即是流水线的输入数据. 顶点处理: 定点通过三角化(t ...

  6. 【Uva 1626】Brackets sequence

    [Link]: [Description] 括号序列由这样的规则生成: 1.空字符是一个括号序列; 2.在括号序列两端加上一对括号也是括号序列; 如(s),[s]; 3.两个括号序列A和B,连在一起, ...

  7. 利用命令行删除Android系统自带应用的方法

    声明:本博客为原创博客.未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...

  8. CHROME开发者工具的小技巧

    我猜不能转载,但是必须分享. http://coolshell.cn/articles/17634.html

  9. golang-nw

    http://godoc.org/github.com/lonnc/golang-nw golang webkit golang walk

  10. 【hdu 6038】Function

    [Link]:http://codeforces.com/contest/834/problem/C [Description] 给你两个排列a和b; a排列的长度为n,b排列的长度为m; a∈[0. ...