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 ...
随机推荐
- rocketmq-cpp-client Visual Studio 2019 编译
rocketmq-cpp-client Visual Studio 2019 编译 rocketmq-cpp-client 是rocketmq c++版本的 所以我们C++ 开发者使用此项目 构建 获 ...
- 手把手教你搭建一个跟vue官方同款文档(vuepress)
前言 VuePress 由两部分组成:第一部分是一个极简静态网站生成器 (opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题 ...
- MongoDB备份(mongodump)与恢复(mongorestore)工具实践
mongodump和mongorestore实践 1.mongodump备份工具 mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档 ...
- requests +httprunne r
1.get 请求和 post 请求的区别是什么? 2.requests 模拟 get 请求时,有哪两种方式让响应的结果不是乱码?(直接代码描述) 3.requests 库中的 post 方法,参数 ...
- 更改mysql的密码
mysql> set password for 'root'@'localhost' =PASSWORD('');Query OK, 0 rows affected (0.17 sec) mys ...
- 【MySQL】CentOS7中使用systemctl工具管理启动和停止MySQL
centos7以前版本,可以使用这个/etc/init.d/mysqld start 来启动mysql 但是centos7之后,通过systemctl start mysqld.service 这个要 ...
- 【CRS】vipca最后一步执行报错CRS-0215
当我们在安装Clusterware 的时候, 需要在第二节点上vipca , 配置到最后安装的时候, 安装到 75% 左右,报错: CRS-0215 : Could not start res ...
- dmp文件导入抽取方法
一.确认dmp文件.oracle客户端和服务端的字符集 (1)dmp文件字符集确认: 使用UE打开dmp文件查看文件第2个和第3个字节内容,这两个字节记录了dmp文件的字符集.如0354,然后用以下s ...
- gears-绕过rbash
0x00 信息收集 0x01 smb攻击 crunch 生成密码的一个软件 @%%,这个是给的密码参数. crunch 4 4 -t @%%, -o words 最小4位,最长 4位 fcrackzi ...
- 代码页(CodePage)列表
代码页编号 国家地区或语言37 IBM037 IBM EBCDIC (US-Canada) 437 IBM437 ...