【链接】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. UE4的JSON读写方式&lt;一&gt;

    声明:全部权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...

  2. BZOJ 1050 枚举+并查集

    思路: 枚举最大边 像Kruskal一样加边 每回更新一下 就搞定了- //By SiriusRen #include <cstdio> #include <cstring> ...

  3. cf 864 F. Cities Excursions

    F. Cities Excursions There are n cities in Berland. Some pairs of them are connected with m directed ...

  4. ajax跨域过程

  5. R学习:《机器学习与数据科学基于R的统计学习方法》中文PDF+代码

    当前,机器学习和数据科学都是很重要和热门的相关学科,需要深入地研究学习才能精通. <机器学习与数据科学基于R的统计学习方法>试图指导读者掌握如何完成涉及机器学习的数据科学项目.为数据科学家 ...

  6. CentOS7的聚合链路

    1.环境介绍 [root@rhcc ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) ENERAL.DEVICE: en ...

  7. react入门安装

    react的入门安装 1.react的适用方法有两种,其一是依赖在线的cdn地址: https://reactjs.org/docs/cdn-links.html 官方给的cdn地址如下 <sc ...

  8. 【Henu ACM Round#18 B】Modulo Sum

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] m比较小 <=1000 a[i]直接看成a[i]%m就可以了. 有n个0..999之间的整数.. 如果有一个0那么就直接输出Y ...

  9. CCF模拟题 字符串匹配

    字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写 ...

  10. Oracle的表空间和sqlplus

    1.  表空间的概念 曾经接触过的数据库都没有听到过表空间这个词,在前一段时间看到Oracle数据库的时候发现表空间无处不在. 所以表空间在Oracle数据库中应该是一个非经常常使用而且非常重要的概念 ...