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 ...
随机推荐
- Haproxy-1.8.20 根据路径(URI)转发到后端不同集群
HAProxy根据不同的URI 转发到后端的服务器组 1 ) 实验内容说明: 1.1 ) 根据不同的URI 转发到后端的服务器组. /a /b 和其他 默认使用其他. 1.2 ) 使用IP介绍: ha ...
- 通用寄存器_MOV_ADD_SUB_AND_OR_NOT
通用寄存器 MOV指令 注意:目标操作数与操作数宽度必须一样 MOV 目标操作数,源操作数 作用:拷贝源操作数到目标操作数 1.源操作数可以是立即数.通用寄存器.段寄存器.或者内存单元. 2.目标操作 ...
- 【Linux】1、命令行及命令参数
命令行及命令参数 文章目录 命令行及命令参数 1.命令行提示符 2.命令和命令参数 简单的命令 date ls 命令参数 短参数(一个字母) 长参数(多个字母) 参数的值 其它参数 3.小结 4.参考 ...
- SDUST数据结构 - chap9 排序
判断题: 选择题: 编程题: 7-1 排序: 输入样例: 11 4 981 10 -17 0 -20 29 50 8 43 -5 输出样例: -20 -17 -5 0 4 8 10 29 43 50 ...
- 工作记录:记一次线上ZK掉线问题排查
目录 问题的发现 zk的情况以及分析 总结 问题的发现 最早问题的发现在于用户提的,用户提出他支付时支付失败,过了一会儿再试就好了,于是翻日志,查询到当时duboo调用出现了下类错误: [TraceI ...
- Windows10下Canvas对象获得屏幕坐标不正确的原因排查与处理
因为Canvas没有直接将画布内容保存为图片的方法,所以很多时候是通过获得Canvas画布的坐标,然后通过截图的方式来将画布内容保存为本地图片. 如何取得Canvas画布的坐标呢,比较简单实用的方式如 ...
- 与图论的邂逅07:K短路
在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...
- 获取html中某些标签的值
一.获取单选按钮radio的值 <!doctype html> <html lang="en"> <head> <meta charset ...
- 数据库 | 001-MySQL梳理系列(一)
MySQL基本组成 SQL执行流程 Server 层主要包括连接器.查询缓存.分析器.优化器.执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数.存储过程.触发器.视图等,其实就是所有跨存 ...
- JavaScript与多线程的不解之缘!
前言 对于前端开发者来说,多线程是一个比较陌生的话题.因为JavaScript是单线程语言.也就是说,所有任务只能在一个线程上完成,一次只能做一件事.前面的任务没做完,后面的任务只能等着. UI渲染与 ...