HDU 3565 Bi-peak Number(数位DP)题解
题意:我们定义每一位先严格递增(第一位不为0)后严格递减的数为峰(比如1231),一个数由两个峰组成称为双峰,一个双峰的价值为每一位位数和,问L~R双峰最大价值
思路:数位DP。显然这个问题和pos有关,和前一项有关,和当前状态有关,我们定义dp[i][j][k]第i位前面j状态k的后面的最佳情况。
状态有7种:
0什么都没,1刚开始第一个上坡,2已经第一个上坡了可以转折了,3第一个下坡0
4刚开始第二个上坡,5已经第二个上坡可以转折了,6第二个下坡
然后数位DP一下就好了。
注意,要开ull,30多个wa的教训
代码:
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include <iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = + ;
const ull seed = ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
int dp[][][];
//0什么都没,1刚开始第一个上坡,2已经第一个上坡了,3第一个下坡0
//4刚开始第二个上坡,5已经第二个上坡,6第二个下坡
//第i位前面j状态k的后面的最佳情况
int top[], low[];
int dfs(int pos, int pre, int st, bool MAXflag, bool MINflag){
if(pos == -)
return st == ? : -INF;
if(!MINflag && !MAXflag && dp[pos][pre][st] != -)
return dp[pos][pre][st];
int Min = MINflag? low[pos] : ;
int Max = MAXflag? top[pos] : ;
int ans = -INF;
for(int i = Min; i <= Max; i++){
int newSt;
if(st == ){
if(i == ) newSt = ;
else newSt = ;
}
else if(st == ){
if(i <= pre) continue;
if(i > pre) newSt = ;
}
else if(st == ){
if(i == pre) continue;
if(i < pre) newSt = ;
else newSt = ;
}
else if(st == ){
if(i < pre) newSt = ;
else if(i > pre) newSt = ;
else{
if(i) newSt = ;
else continue;
}
}
else if(st == ){
if(i <= pre) continue;
newSt = ;
}
else if(st == ){
if(i == pre) continue;
if(i > pre) newSt = ;
else newSt = ;
}
else if(st == ){
if(i >= pre) continue;
newSt = ;
}
ans = max(ans, i + dfs(pos - , i, newSt, MAXflag && i == Max, MINflag && i == Min));
}
if(!MAXflag && !MINflag)
dp[pos][pre][st] = ans;
return ans;
}
int solve(ull l, ull r){
int pos = ;
while(r){
top[pos] = r % ;
low[pos++] = l % ;
r /= ;
l /= ;
}
int ans = dfs(pos - , , , true, true);
return max(, ans);
}
int main(){
int t, ca = ;
memset(dp, -, sizeof(dp));
scanf("%d", &t);
while(t--){
ull l, r;
cin >> l >> r;
printf("Case %d: %d\n", ca++, solve(l, r));
}
return ;
}
HDU 3565 Bi-peak Number(数位DP)题解的更多相关文章
- 多校5 HDU5787 K-wolf Number 数位DP
// 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- 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 ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- hdu 5898 odd-even number(数位dp)
Problem Description For a number,if the length of continuous odd digits is even and the length of co ...
- 题解——HDU 4734 F(x) (数位DP)
这道题还是关于数位DP的板子题 数位DP有一个显著的特征,就是求的东西大概率与输入关系不大,理论上一般都是数的构成规律 然后这题就是算一个\( F(A) \)的公式值,然后求\( \left [ 0 ...
- 题解——HDU 2089 不要62(数位DP)
最近在学数位DP 应该是入门题吧 设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数 然后就是套路 注意\( limit \)的限制条件以及转移时候信息的 ...
- HDU 2089 不要62 (数位DP)题解
思路: 详解 数位DP入门题dp[pos][sta],pos代表当前位数是第几位,sta代表当前状态,因为题目中只要不出现64,所以当前状态只分为两种:前一位是6或不是. #include<io ...
随机推荐
- k8s-N0.4-service
本章目录 k8s中的三种网络 service的构建及参数说明 一 k8s的三种网络 在k8s集群中,k8s是有三种网络类型的,下面我们看一下下面这个图 1 节点网络:顾名思义,节点网络就是你每台物理 ...
- idea将maven项目打包成war包
1.单击红色方框处 2.在IDEA右侧出现maven project选项 3.单击maven project选项,出现Spring MVC Basic Feature菜单,选择 其中的Lifecycl ...
- vue项目打包之后js文件过大怎么办?
- 3种检测页面是否符合amp标准的方法
AMP的关键优势不仅仅在于它能让你的页面更快,还在于它的快可以被验证.有几种方法可以验证AMP文档,它们都会产生完全相同的结果,选择最适合您的开发风格的方法.除了AMP的有效性,您可能还想确认您的AM ...
- 一HTML基础知识
网站(前段项目)的目录结构及命名 网站的结构:网站是存放在服务器上的一个文件夹(根目录),是网站所有文件的集合.网站中所有文件按照文件类型或功能分门别类的整理存放. 网站命名规则:网站中的所有文件命名 ...
- h5页面适配小结
大概是去年的7月想写这个内容去加深自己的理解.现在终于回来补上这篇入门小结了. 1.问题描述 适配的目标:在不同尺寸的手机设备上,页面“相对性的达到合理的展示(自适应)”或者“保持统一效果的等比缩放( ...
- 关于最小生成树(并查集)prime和kruskal
适合对并查集有一定理解的人. 新手可能看不懂吧.... 并查集简单点说就是将相关的2个数字联系起来 比如 房子 1 2 3 4 5 6 ...
- C#学习笔记(2)
1.获取当前可用串口端口号 using System.IO.Ports; string[] portNames = SerialPort.GetPortNames(); 2.TextBox换行.设置光 ...
- vuepress 学习心得
vuepress是一个静态网站生成器,在我看来就是写博客和教程的好工具.教程请见官网:https://www.vuepress.cn 安装方法建议局部安装:node8.0以上,新建vue项目,可能会出 ...
- Vue.js新城之勇者探秘录
那么我们就继续来聊聊学习Vue的一些方法?以下的学习思路可以供大家作为参考: 1.视频教程带你入门:初学者如果没有MVVM模式的基础学习Vue,可能初期切换思路有比较大的难度,这个时候可以借助视频教程 ...