数位DP || Gym 101653R Ramp Number
每一位都大于等于前一位的数叫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的更多相关文章
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- codeforces Hill Number 数位dp
http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ...
- Codeforces Gym 100231L Intervals 数位DP
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- 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 ...
- Fzu2109 Mountain Number 数位dp
Accept: 189 Submit: 461Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description One ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU3709 Balanced Number (数位dp)
Balanced Number Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descript ...
- 多校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 用作标记,当现在枚举的数小 ...
随机推荐
- bzoj1038&&500AC!
序列dp 先开始想了一个类似区间dp的东西...少了一维 然后发现似乎不太对,因为女生的最大差和男生的最大差并不相等 dp[i][j][x][y]表示当前有i个人,j个男生,男生和女生的后缀最大差是x ...
- java中为什么inputstreamreader和buffered reader要配合着用
因为InputStreamReader是字节输出(汉字会被分为两个字节),而BufferedReader是它的“包装”(整行读取),效率更高,所以配合使用更好.可以通过BufferedReader 流 ...
- NOI前总结:点分治
点分治: 点分治的题目基本一样,都是路径计数. 其复杂度的保证是依靠 $O(n)$ 找重心的,每一次至少将问题规模减小为原先的$1/2$. 找重心我喜欢$BFS$防止爆栈. int Root(int ...
- poj1664【DFS】
思路:搜一下,还想多了,记得以前做过把一个数搞成几个数的相加组合,然后这题无非就是多了个组合的个数<=m的,那么只要多加一个条件,当num>m的时候也return掉就好了. //#incl ...
- Linux系统配置文件
ubuntu系统: ~/.bashrc:该文件保存终端的文本,颜色等各类设置 ~/.bash_history:保存用户运行过的命令 ~:表示home目录 /etc/matb:该文件保存所有挂载分区的文 ...
- vue移动端开发全家桶
一句命令搞定全家桶: npm install vue-router vue-resource vuex --save main.js配置: import Vue from 'vue' impor ...
- redirect与forward的区别
文件名称:forward.jsp <html> <head><title> 跳转 </title> </head> <body> ...
- SQL 列拼接使用
一个产品收藏表 Collection , 把该产品被收藏的人拼接在一列中如下: SQL SERVER SELECT ProjectID, UserIDs = ','+(STUFF((SELECT ', ...
- C# winform 创建快捷方式
using System;using IWshRuntimeLibrary;using System.IO; namespace UavSystem.Common{ public class S ...
- AJPFX简述Scanner类的特点
hasNextInt() :判断是否还有下一个输入项,其中Xxx可以是Int,Double等.如果需要判断是否包含下一个字符串,则可以省略Xxx nextInt(): 获取下一个输入项. ...