每一位都大于等于前一位的数叫Ramp Number

给一个数,如果不是Ramp Number输出-1,如果是Ramp Number输出比它小的Ramp Number的个数

只和每一位上的数字有关

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
char s[];
long long f[][];//数位dp
int main()
{
int T;
scanf("%d", &T);
memset(f, , sizeof(f));
for(int i = ; i <= ; i++) f[][i] = ;
for(int i = ; i <= ; i++)
{
for(int j = ; j <= ; j++)
{
for(int k = j; k <= ; k++)
f[i][j] += f[i - ][k];
}
}
/*f[i][j]表示长度为i以j开头的这样的数有多少个
*f[i][j] = sum(f[i-1][k]) k>=j
*例如f[3][5] 表示长度为3,以5开头的上升数的个数 即333,334,335,336……
*只看后两位 33,34,35…… 44,45,46……
*是长度为2,以3开头的+长度为2,以4开头的+……
*/
/*
*加的时候如1345 -> f[4][0] + f[3][1] + f[3][2] + f[2][3] + f[2][4] + f[1][4] + f[1][5]
*f[4][0] 所有一二三位数,然后固定第一位是1
*f[3][x] (x >= 1 && x < 3) 取的这些三位数后在前面放1就是结果,然后固定第二位是3
*以此类推
*/
while(T--)
{
scanf("%s", s);
int len = strlen(s);
int flag = ;
for(int i = ; i < len; i++)
{
if(s[i] < s[i - ])
flag = ;
}
if(!flag)
{
printf("-1\n");
continue;
}
long long ans = ;
for(int i = ; i <= len; i++)
{
for(int j = i == ?:s[i-] - ''; j < s[i-] - ''; j++)
{
ans += f[len-i+][j];
}
}
printf("%lld\n", ans);
}
return ;
}

数位DP || Gym 101653R Ramp Number的更多相关文章

  1. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  2. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  3. Codeforces Gym 100231L Intervals 数位DP

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, ...

  4. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  5. HDU 5787 K-wolf Number 数位DP

    K-wolf Number Problem Description   Alice thinks an integer x is a K-wolf number, if every K adjacen ...

  6. Fzu2109 Mountain Number 数位dp

    Accept: 189    Submit: 461Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description One ...

  7. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  8. HDU3709 Balanced Number (数位dp)

     Balanced Number Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Descript ...

  9. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

随机推荐

  1. 3.11-3.15 HDFS HA

    一.背景 1. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF).对于只有一个NameNode的集群, 若NameNode机器出现故障,则整个集群将无法使用,直到Nam ...

  2. Python学习之旅—生成器与迭代器案例剖析

    前言 前面一篇博客笔者带大家详细探讨了生成器与迭代器的本质,本次我们将实际分析一个具体案例来加深对生成器与迭代器相关知识点的理解. 本次的案例是一个文件过滤操作,所做的主要操作就是过滤出一个目录下的文 ...

  3. Redis的相关命令

    Redis的相关命令 redis程序的命令 /usr/bin/redis-benchmark /usr/bin/redis-check-aof /usr/bin/redis-check-rdb /us ...

  4. 容器云未来:Kubernetes、Istio 和 Knative

    导读 目前以Kubernetes为基础构建的容器生态逐渐完善,这其中Kubernetes.Istio.Knative三个独立项目被越来越多的人提及,并且已经开始尝试大规模落地实践,它们恰好构成了容器云 ...

  5. C++语言中的static关键字的作用是什么?

    在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量.在模块 ...

  6. python list生成表达式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式.运用列表生成式,可以写出非常简洁的代码. >>> list(ra ...

  7. (7)javascript的程序控制结构及语句------(2)循环控制语句、跳转语句、对话框

    一.循环控制语句 循环语句主要就是在满足条件的情况下反复执行某一个操作,循环控制语句主要包括while语句.do...while语句 和for语句. 1.While语句 语法: While(条件表达式 ...

  8. CIFAR10自定义网络实战

    目录 CIFAR10 MyDenseLayer CIFAR10 MyDenseLayer import os import tensorflow as tf from tensorflow.keras ...

  9. 即时编译(JIT)

    即时编译(JIT : just-in-time compilation): 指计算机领域里,即时编译也被成为动态翻译,是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术 即时编译 ...

  10. 仅用递归函数操作逆序一个栈(Swift 4)

    /// 取出栈底的数 func getAndRemoveLastElement(_ items: inout [Int]) -> Int { let value = items.remove(a ...