Mountain NumberFZU-2109

  题目大意:一个大于0的数字x,分写成x=a[0]a[1]a[2][3]..a[n]的形式,(比如x=1234,a[0]=1,a[1]=2,a[3]=3,a[3]=4),Mountain Number要满足对于a[2*i+1]要大于等于a[2*i]和a[2*i+2],给定范围l,r问,有多少个Mountain Number

  就简单的数位dp,照着题意写就行,而且求的是数字,前导0并没有任何影响,对于全0的情况,我们把0也特别视为Mountain Number,也就消除了全0的影响。然后就根据奇偶性判断,奇数位的数要大于等于前一个,偶数位的数要小于等于前一个的数。

  一开始看错题意了,以为要满足a[0]<=a[1]>=a[2],a[1]<=a[2]>=a[3],那么就是a[0]<=a[1]=a[2]=a[3]=..>=a[n],然后写着写着把自己写晕了,仔细看题目才发现,只是对奇数位的数要大于等于前后的数。

 #include<cstdio>
int a[],dp[][][];//dp[i][j][k]第i数位的前一个数是j奇偶性是k的答案
int dfs(int p,int pre,bool jo,bool lim)
{
if(p<)
return ;
if(!lim&&dp[p][pre][jo]!=-)
return dp[p][pre][jo];
int up=(lim ? a[p] : ),ans=;
for(int i=;i<=up;i++)
{
if(!jo&&i<=pre)
ans+=dfs(p-,i,,lim&&i==a[p]);
else if(jo&&i>=pre)
ans+=dfs(p-,i,,lim&&i==a[p]);
}
if(!lim)
dp[p][pre][jo]=ans;
return ans;
}
int solve(int x)
{
int n=;
while(x)
{
a[n++]=x%;
x/=;
}
return dfs(n-,,,);
}
int main()
{
int t,l,r;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<;k++)
dp[i][j][k]=-;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&l,&r);
printf("%d\n",solve(r)-solve(l-));
}
return ;
}

Mountain Number FZU-2109数位dp的更多相关文章

  1. 2018.08.19 NOIP模拟 number(类数位dp)

    Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...

  2. Codeforces Round #460 (Div. 2) B Perfect Number(二分+数位dp)

    题目传送门 B. Perfect Number time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  3. Balanced Number HDU - 3709 数位dp

    题意: 给出范围 算出 满足  选取一个数中任一一个 树作为支点  两边的数分别乘以到中心的距离和 左和等于右和   的数有多少个 数位DP题 状态转移方程为dp[pos][x][state]=dp[ ...

  4. fzu 2113 数位dp

    #include<stdio.h> #include<string.h> #define N 20 #define ll __int64 ll dp[N][N];//最多记忆4 ...

  5. CSP模拟赛 number (二分+数位DP)

    题面 给定整数m,km,km,k,求出最小和最大的正整数 nnn 使得 n+1,n+2,-,2nn+1,n+2,-,2nn+1,n+2,-,2n 中恰好有 mmm 个数 在二进制下恰好有 kkk 个 ...

  6. hdu 5898 odd-even number 数位DP

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

  7. FZU - 2109 Mountain Number 数位dp

    Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ...

  8. Fzu2109 Mountain Number 数位dp

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

  9. FZU 2109 Mountain Number

    http://acm.fzu.edu.cn/problem.php?pid=2109 题意:找出区间[l,r]内满足奇数位的数字大于相邻偶数位数字的个数. 典型的数位dp了,记录一下当前位是奇数位还是 ...

随机推荐

  1. 修改mac系统的host文件 (一)

    hosts是本地预先配置的DNS数据,解析域名的时候首先试图从hosts文件获取,没有则从DNS服务器获取. 此文件的三个主要用途: 加快域名解析 方便局域网用户 一般局域网很少假设DNS服务器,访问 ...

  2. Maven maven-compiler-plugin 编译问题

    问题:每次右键项目名-maven->update project 时候,项目jdk版本变了,变回1.5版本或者其他版本 解决方案一:修改maven的配置(解压目录的conf\setting.xm ...

  3. java lesson15Homework

    package lesson15; /** * 1. 使用ArrayList存储整型元素,并对元素进行升序输出 */ import java.util.ArrayList; import java.u ...

  4. .net get set用法

    在早期学习c#的过程中,经常遇到这样的语句: public string StudentName{           get{return stuName;}           set{stuNa ...

  5. dev grid的一些使用

    保留选中数据,其他数据删除,不操作数据库 private void butnoremove_Click(object sender, EventArgs e) { int iSelectRowCoun ...

  6. centos安装配置mariadb

    CentOS7下使用yum安装MariaDB CentOS 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包,但 CentOS 7 已使用了 MariaDB 替代了默认的 MySQL.M ...

  7. Centos7:MyCat安装,配置及使用

    解压缩 使用,默认端口8066 ./mycat start //启动 ./mycat stop //停止 ./mycat restart //重启

  8. Nginx作为静态资源web服务之跨域访问

    Nginx作为静态资源web服务之跨域访问 首先了解一下什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相 ...

  9. [yii\queue\Queue] [10] unknown job (attempt: 1, PID: 31167) is finished with error: yii\base\ErrorException: unserialize(): Error at offset 1922 of 65535 bytes

    网上的解决方案: 1. 报错场景:序列化字段中有中文,反序列化时有可能会出现报错. 错误原因:写入和取出数据库的时候,编码不同,中文符号长度不同,序列化中的长度就无法匹配. 解决办法:适合 php 5 ...

  10. python之时间日期datetime

    相比于time模块,datetime模块的接口则更直观.更容易调用datetime模块定义了以下几个类: datetime.date():表示日期的类.常用的属性是year,month,day:dat ...