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 ...
随机推荐
- 新蜂商城的mybatis plus版本,添加了秒杀专区、优惠卷领取以及后台搜索功能
本项目是在newbee-mall项目的基础上改造而来,将orm层由mybatis替换为mybatis-plus,添加了秒杀功能.优惠劵功能以及后台搜索功能,喜欢的话麻烦给我个star 后台管理模块添加 ...
- 【JavaWeb】JSTL 标签库
JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...
- 【Linux】关于CentOS系统中,文件权限第11位上是一个点的解读
------------------------------------------------------------------------------------------------- | ...
- 【EXPDP】导出全部表的时候,选择不导出某个表
导出的时候指定某一张表不导出的话,一般都用的是数据泵的expdp来操作 具体方法是: expdp test/test dumpfile=test.dmp directory=test_dir excl ...
- Sentinel上下文创建及执行
Sentinel上下文创建及执行,入口示例代码: public static void fun() { Entry entry = null; try { entry = SphU.entry(SOU ...
- 《进击吧!Blazor!》第一章 2.Hello Blazor
第二次写专栏,开头还是不知道说什么,所以--先来段广告<进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发 ...
- ThreadLocal 原理分析
用法 ThreadLocal<String> threadLocal = new ThreadLocal<>(); // 无初始值 ThreadLocal<String& ...
- 【中文】【deplearning.ai】【吴恩达课后作业目录】
[目录][吴恩达课后作业目录] 吴恩达深度学习相关资源下载地址(蓝奏云) 课程 周数 名称 类型 语言 地址 课程1 - 神经网络和深度学习 第1周 深度学习简介 测验 中英 传送门 无编程作业 编程 ...
- python Mysql 多条件查询
做项目时,遇到一场景,前端至少传入一个参数,最多传入四个参数,根据单参数或者组合参数,从数据库筛选数据. 作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=1 ...
- 太极图HTML+CSS(可旋转)代码记录
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...