hdu3565 Bi-peak Number (有上界和下界的数位dp)
A number is called bi-peak if it is a concatenation of two peak numbers.

The score of a number is the sum of all digits. Love8909 is crazy about bi-peak numbers. Please help him to calculate the MAXIMUM score of the Bi-peak Number in the closed interval [A, B].
Each case consists of two integers “A B” (without quotes) (0 <= A <= B < 2^64) in a single line.
12121 12121
120010 120010
121121 121121
Case 2: 0
Case 3: 8
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 99999999
#define MOD 1000000007
int wei1[100],wei2[100];
int dp[100][10][8];
int dfs(int pos,int pre,int state,int flag1,int flag2)
{
int i,j;
if(pos==0){
if(state==6)return 0;
return -inf;
}
if(!flag1 && !flag2 && dp[pos][pre][state]!=-1){
return dp[pos][pre][state];
}
int min1=flag1?wei1[pos]:0;
int max1=flag2?wei2[pos]:9;
int ans=-inf;
for(i=min1;i<=max1;i++){
if(state==0){
if(i>0){
ans=max(ans,i+dfs(pos-1,i,1,flag1&&i==min1,flag2&&i==max1) );
}
else if(i==0)ans=max(ans,0+dfs(pos-1,i,0,flag1&&i==min1,flag2&&i==max1));
}
else if(state==1){
if(i>pre){
ans=max(ans,i+dfs(pos-1,i,2,flag1&&i==min1,flag2&&i==max1));
}
}
else if(state==2){
if(i>pre){
ans=max(ans,i+dfs(pos-1,i,2,flag1&&i==min1,flag2&&i==max1));
}
if(i<pre){
ans=max(ans,i+dfs(pos-1,i,3,flag1&&i==min1,flag2&&i==max1 ) );
}
}
else if(state==3){
if(i<pre){
ans=max(ans,i+dfs(pos-1,i,3,flag1&&i==min1,flag2&&i==max1 ) );
}
if(i>0){
ans=max(ans,i+dfs(pos-1,i,4,flag1&&i==min1,flag2&&i==max1 ) );
}
}
else if(state==4){
if(i>pre){
ans=max(ans,i+dfs(pos-1,i,5,flag1&&i==min1,flag2&&i==max1));
}
}
else if(state==5){
if(i>pre){
ans=max(ans,i+dfs(pos-1,i,5,flag1&&i==min1,flag2&&i==max1));
}
if(i<pre){
ans=max(ans,i+dfs(pos-1,i,6,flag1&&i==min1,flag2&&i==max1 ) );
}
}
else if(state==6){
if(i<pre){
ans=max(ans,i+dfs(pos-1,i,6,flag1&&i==min1,flag2&&i==max1) );
}
}
}
if(!flag1 && !flag2){
dp[pos][pre][state]=ans;
}
return ans;
}
int main()
{
ull m,n;
int T,i,j,cas=0;
memset(dp,-1,sizeof(dp));
scanf("%d",&T);
while(T--)
{
cin>>m>>n;
int len=0;
while(n){
len++;
wei2[len]=n%10;
n/=10;
wei1[len]=m%10;
m/=10;
}
int ans=dfs(len,0,0,1,1);
if(ans<0)ans=0;
printf("Case %d: %d\n",++cas,ans);
}
return 0;
}
hdu3565 Bi-peak Number (有上界和下界的数位dp)的更多相关文章
- HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)
定义DP[pos][pre][odd][even],pos代表当前数位,pre代表前一位的数值,odd代表到前一位连续的奇数个数,even代表到前一位连续偶数个数. odd和even肯定至少有一个为0 ...
- Mountain Number FZU-2109数位dp
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, ...
- scala-协变、逆变、上界、下界
scala-协变.逆变.上界.下界 当我们定义一个协变类型List[A+]时,List[Child]可以是List[Parent]的子类型. 当我们定义一个逆变类型List[-A]时,List[Chi ...
- Scala中的协变,逆变,上界,下界等
Scala中的协变,逆变,上界,下界等 目录 [−] Java中的协变和逆变 Scala的协变 Scala的逆变 下界lower bounds 上界upper bounds 综合协变,逆变,上界,下界 ...
- (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍
看源码的时候看到: trait ExtensionId[T <: Extension] { 没见过这个符号啊<: Scala上界(<:)和下界(>:) 1) U >: T ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- codeforces Hill Number 数位dp
http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ...
- 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 ...
随机推荐
- Flutter 基础组件:图片和Icon
前言 Flutter中,可以通过Image组件来加载并显示图片,Image的数据源可以是asset.文件.内存以及网络. ImageProvider 是一个抽象类,主要定义了图片数据获取的接口load ...
- mac安装Navicat Premium Mac 12 破解版
参考:https://www.cnblogs.com/lyfstorm/p/11123159.html 激活后:
- 【Spring】Spring中的Bean - 2、Baen的实例化 (构造器、静态工厂、实例工厂)
Bean的实例化 文章目录 Bean的实例化 构造器实例化 静态工厂方式实例化 实例工厂方式实例化 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-S ...
- os-Bytes环境变量劫持
信息收集 netdiscovery -i eth0 nmap -sV -sC 192.168.43.74 -oA os-Bytes gobuster -u 192.168.43.74 -w /usr/ ...
- fsutil比较有用的几个命令
Fsutil:fsinfo 主要由专业支持者使用.列出所有驱动器,查询驱动器类型,查询卷信息,查询特定的 卷信息或文件系统统计信息. 语法参数 drives 列出计算机中所有的驱动器. drivety ...
- ping 命令示例
将下面的代码粘贴到记事本中,然后保存为扩展名为BAT的文件,运行就可以将网段内ping不通的IP地址写入到文本文件IP.txt中. @echo offsetlocal ENABLEDELAYEDEXP ...
- [Usaco2008 Mar]River Crossing渡河问题
题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...
- 001.IT运维面试问题-Linux基础
Linux基础 简述Linux主流的发行版? Redhat.CentOS.Fedora.SuSE.Debian.Ubuntu.FreeBSD等. 简述Linux启动过程? ⑴开机BIOS自检,加载硬盘 ...
- Nifi组件脚本开发—ExecuteScript 使用指南(一)
Part 1 - 介绍 NiFi API 和 FlowFiles ExecuteScript 是一个万能的处理器,允许用户使用编程语言定义自己的数据处理功能, 在每一次 ExecuteScript p ...
- Hmailserver搭建邮箱服务器
由于阿里云,谷歌云,腾讯云等服务器都不开放25端口和pop3端口,想要使用邮箱服务得购买他们的企业邮箱,但是对于个人而言比较贵. 所以我们需要利用家庭宽带申请公网IP. 首先打电话给运营商客服,申请动 ...