题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3565

题意:给你一个区间,让你找这个区间内有两个山峰的数的最大和,什么是两个山峰,比如121121  第一个2 和第二个2就是两个峰

题解:求的这个不满足dfs(y)-dfs(x)所以只有用一个上限和一个下限来限制

s=0:前导0的状态;
s=1:第一个山峰的上坡,且不能立马下坡;
s=2:第一个山峰的上坡,且最后一点能看成是最高点,下一个点可以是下坡;
s=3:第一个山峰的下坡;
s=4:第二个山峰的上坡,且不能立马下坡;
s=5:第二个山峰的上坡,且最后一点能看成是最高点,下一个点可以是下坡;
s=6:第二个山峰的下坡;
s=-1:其余不合法的状态。

设dp[i][j][k]为考虑第i位,上一个数字为j,状态s为k的最大数位和

 #include<cstdio>
#define MAX(a,b) ((a)>(b)?(a):(b))
#define F(i,a,b) for(int i=a;i<=b;i++) int dp[][][],ss[],ee[],t,len,an;unsigned __int64 x,y; int dfs(int pos,int pre,int s,int fx,int fy){
if(!pos)return s==?:-;
if(!fx&&!fy&&dp[pos][pre][s]!=-)return dp[pos][pre][s];
int st=fx?ss[pos]:,end=fy?ee[pos]:,ans=-,tp,ns;
F(i,st,end){
ns=s;
if(!s&&i)ns=;
else if(s==){if(i>pre)ns=;else ns=-;}
else if(s==){if(i<pre)ns=;else if(i==pre)ns=-;}
else if(s==&&i>=pre){if(i)ns=;else ns=-;}
else if(s==){if(i>pre)ns=;else ns=-;}
else if(s==){if(i<pre)ns=;else if(i==pre)ns=-;}
else if(s==&&i>=pre)ns=-;
if(ns!=-)tp=dfs(pos-,i,ns,fx&&i==st,fy&&i==end),ans=(tp==-?ans:MAX(ans,i+tp));
}
if(!fx&&!fy)dp[pos][pre][s]=ans;
return ans;
} int main(){
F(i,,)F(j,,)F(k,,)dp[i][j][k]=-;
scanf("%d",&t);
F(i,,t){
scanf("%I64u%I64u",&x,&y);
for(len=;y;x/=,y/=)ss[++len]=x%,ee[len]=y%;
an=dfs(len,,,,),printf("Case %d: %d\n",i,an==-?:an);
}
return ;
}

hdu_3565_Bi-peak Number(数位DP)的更多相关文章

  1. 多校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 用作标记,当现在枚举的数小 ...

  2. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  3. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  4. 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 ...

  5. Fzu2109 Mountain Number 数位dp

    Accept: 189    Submit: 461Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description One ...

  6. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  7. beautiful number 数位DP codeforces 55D

    题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...

  8. FZU - 2109 Mountain Number 数位dp

    Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ...

  9. BNU 13024 . Fi Binary Number 数位dp/fibonacci数列

    B. Fi Binary Number     A Fi-binary number is a number that contains only 0 and 1. It does not conta ...

  10. 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 ...

随机推荐

  1. hdu1664 bfs+余数判重

    input n 不超过50个例子,n==0结束输入 Sample Input 7 15 16 101 0 output 最少个不同数字的n的倍数的x,若不同数字个数一样,输出最小的x Sample O ...

  2. QT自绘标题和边框

    在QT中如果想要自绘标题和边框,一般步骤是: 1) 在创建窗口前设置Qt::FramelessWindowHint标志,设置该标志后会创建一个无标题.无边框的窗口. 2)在客户区域的顶部创建一个自绘标 ...

  3. Date时间对象方法

  4. Hadoop中Namenode的HA查询和切换

    有一段时间没有关注公司服务器上自己搭的三台小型hadoop集群了,上星期公司机房停电了,这次上去start了集群,但是发现start之后无法工作了. 查看了jps发现该有的进程都有了,敲入 hadoo ...

  5. HashMap,HashTable ,LinkedHashMap,TreeMap的区别

    Map:主要是存储键值对,不允许键重复,但可以值重复. HashMap:根据键的HashCode值来存储数据,根据键直接获取值.具有很快的访问速度,遍历时,取得的数据值的顺序都是随机的.hashMap ...

  6. ubuntu 搭建python2.x 抓取环境

    1.apt-get install python-bs4 bs4只有py2的代码,安装在py3下会很麻烦 bs4支持HTML parser,也可以支持第三方的分析器 2.apt-get install ...

  7. 第五十四节,socketserver通讯模块实现并发操作,真多线程并发

    socketserver通讯模块实现并发操作,基于select.epoll.socket.多线程,实现的正真多线程多并发 socketserver通讯模块底层调用的socket模块,只是它作了处理基于 ...

  8. BitSort

    这个题为<编程珠玑>中提到的算法,解题思路和桶排序/基数排序一样,适用于大量没有重复的数据. 结题思路: 1.遍历整个数据文件,每提取一个数据,在BitMap中对应的位置赋1 2.遍历Bi ...

  9. HTML通过事件传递参数到js 二 event

    原文链接http://blog.sina.com.cn/s/blog_8a18c33d010172pp.html event用例: <!DOCTYPE html><html>& ...

  10. table 中的td 字段超长,超过部分用....表示

    #contentTable{ table-layout:fixed;}.contentShort{ text-overflow: ellipsis; overflow: hidden; white-s ...