【链接】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. p2p項目夭折,有種蛋蛋的憂傷。。

      在高考完的暑假就在跟杰哥讨论怎样实现的校内p2p文件共享,就在今天.我们无奈的宣布差点儿夭折. 上图是測试图. 那时候的思路已经完好.就是:"学生上传共享文件到咱们工作室的server. ...

  2. python之文件操作-复制、剪切、删除等

    以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: <span style="font-size:18px;">>> ...

  3. Sqlite 命令行导出、导入数据(直接支持CSV)

    打开命令行 导出数据到data.csv D:\project>sqlite3.exe old.db SQLite version 3.21.0 2017-10-24 18:55:49 Enter ...

  4. apiCloud手动检测更新

    有时候需要给用户一个自主的权利,自主检测app是否是最新版本. 如何实现? 1.点击调用接口,检测是否有更新. 默认APICloud会自动检测版本更新,用户也可以在config.xml里配置autoU ...

  5. Material Design控件使用学习 TabLayout+SwipeRefreshlayout

    效果: Tablayout有点类似之前接触过的开源ViewPagerIndicator,将其与viewpager绑定,可实现viewpager的导航功能. SwipeRefreshLayout是官方出 ...

  6. 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF

    主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...

  7. react基础用法二(组件渲染)

    react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 />  ...

  8. vue踩坑-This relative module was not found

    在使用vue.js的日期选择插件 的时候,报错如下 This relative module was not found: * ../calendar.vue in ./node_modules/ba ...

  9. 【Henu ACM Round #12 E】Thief in a Shop

    [链接] 我是链接,点我呀:) [题意] n个物品,每个物品都有无限个. 第i个物品的价格是一样都,都是ai 让你从中选出恰好k个物品 问你选出的物品的总价值 有多少种不同的可能. [题解] 可以用f ...

  10. HDU 4975 A simple Gaussian elimination problem.

    A simple Gaussian elimination problem. Time Limit: 1000ms Memory Limit: 65536KB This problem will be ...