FZU 2109 Mountain Number (数位DP)
来源:互联网 发布:电脑蓝牙软件下载 编辑:程序博客网 时间:2024/05/18 12:05
One integer number x is called "Mountain Number" if:
(1) x>0 and x is an integer;
(2) Assume x=a[0]a[1]...a[len-2]a[len-1](0≤a[i]≤9, a[0] is positive). Any a[2i+1] is larger or equal to a[2i] and a[2i+2](if exists).
For example, 111, 132, 893, 7 are "Mountain Number" while 123, 10, 76889 are not "Mountain Number".
Now you are given L and R, how many "Mountain Number" can be found between L and R (inclusive) ?
The first line of the input contains an integer T (T≤100), indicating the number of test cases.
Then T cases, for any case, only two integers L and R (1≤L≤R≤1,000,000,000).
31 101 1001 1000
954384
题意:
如果一个>0的整数x,满足a[2*i+1] >= a[2*i]和a[2*i+2],则这个数为Mountain Number。
给出L, R,求区间[L, R]有多少个Mountain Number。
思路:
数位DP,判断当前是偶数位还是奇数位(从0开始),如果是偶数位,那么它要比前一个数的值小,
如果是奇数位,那么它要比前一个数的值大。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int dp[11][11][11];int b[11];int dfs(int pos,int pre,int status,int limit){ if(pos<0) return 1; if(!limit && dp[pos][pre][status]!=-1) return dp[pos][pre][status]; int end = limit?b[pos]:9; int ret = 0; for(int i=0;i<=end;i++) { if(status && i<=pre) ret+=dfs(pos-1,i,0,limit && i==end); if(!status && i>=pre) ret+=dfs(pos-1,i,1,limit && i==end); } if(!limit) dp[pos][pre][status] = ret; return ret;}int work(int num){ memset(b,0,sizeof(b)); int i,j,cnt=0; while(num) { b[cnt++]=num%10; num/=10; } return dfs(cnt-1,9,1,1);}int main(){ ios::sync_with_stdio(false); int T,l,r; cin>>T; memset(dp,-1,sizeof(dp)); while(T--) { cin>>l>>r; cout<<work(r)-work(l-1)<<endl; } return 0;}
- FZU 2109 Mountain Number ---数位dp
- FZU - 2109 Mountain Number 数位DP
- FZU-2109 Mountain Number(数位dp)
- FZU 2109 Mountain Number (数位DP)
- fzu 2109 Mountain Number 数位DP 记忆化搜索
- FZU 2109 Mountain Number [数位DP]【动态规划】
- fzu 2109 Mountain Number 数位DP 递推
- FZU 2109 Mountain Number_数位DP
- fzu 2109 Mountain Number
- FZU - 2109 Mountain Number
- FZU2109:Mountain Number(数位DP)
- FZU2109:Mountain Number(数位DP)
- FZU2109 Mountain Number (数位DP)
- Mountain Number (数位dp)
- fzu 2109(数位dp)
- FZU 2019 Mountain Number
- FZU 2070 - Beautiful number 数位DP..
- foj 2109 Mountain Number 位数dp
- 关于导入项目报错相关问题
- Android音频捕获(录音)
- JDK中的包和他们的基本功能
- 协方差矩阵概念及其计算
- 调试WebService接口的小工具-storm
- FZU 2109 Mountain Number (数位DP)
- python核心数据类型 -- 概览
- Reverse a String
- leecode 解题总结:372. Super Pow
- iOS可变参数和Format Function
- 点击Edittext,禁止软键盘弹出
- 八大排序算法之堆排序解析
- IDEA 创建MAVEN 项目
- C语言调用Lua编译问题总结