[数字dp] hdu 3565 Bi-peak Number

[数字dp] hdu 3565 Bi-peak Number

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

意甲冠军:

为了范围[X,Y],的最大位数的范围内的需求高峰和值多少。

双峰是为了满足一些规定数量 你可以切两 /\ /\ 形式。

思维:

dp[site][cur][ok]  site地点  面的数是cur 状态为ok

ok分为7种

0:前面全部数都是0

1:第一个峰数且仅仅有一个数

2:第一个峰数在峰顶(可上可下)

3:第一个峰数在峰底(可进入下一个峰或者继续往下)

4:同1 是第二个峰数

5:同2 是第二个峰数

6:同3 可是不可进入下一个峰数了

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
using namespace std;
#define ll unsigned __int64
int dp[30][10][7];
int numx[30],numy[30];
int dfs(int site,int cur,int ok,int fa,int fb)  //由于是大小 所以要在中间推断
{
    if(site==0) return ok==6?0:-1;  //状态6代表成立的数
    if(!fa&&!fb&&~dp[site][cur][ok]) return dp[site][cur][ok];  //都不是边界
    int Min=fa?

numx[site]:0; //上界 int Max=fb?numy[site]:9; //下界 int ans=-1; //初值 for(int i=Min; i<=Max; i++) { int tep=0; if(ok==0&&i) tep=1; //去前导0 else if(ok==1) { if(i>cur) tep=2; //往上走 else tep=-1; //无法走 } else if(ok==2) { if(i>cur) tep=2; //继续上 else if(i==cur) tep=-1; //相等不能走 else tep=3; //往下 } else if(ok==3) { if(i>cur) tep=4; //跳到第二个峰 else if(i==cur) //相等的话0不能跳,由于不能前导0 { if(i) tep=4; else tep=-1; } else tep=3; //继续下 } else if(ok==4) //下同上 { if(i>cur) tep=5; else tep=-1; } else if(ok==5) { if(i>cur) tep=5; else if(i==cur) tep=-1; else tep=6; } else if(ok==6) { if(i>=cur) tep=-1; //最后仅仅能下不能跳了 else tep=6; } if(tep!=-1) { int sum=dfs(site-1,i,tep,fa&&i==Min,fb&&i==Max); //这位放完 后面的最大值 if(sum!=-1) ans=max(ans,sum+i); //加上这位比大小 } } if(!fa&&!fb) dp[site][cur][ok]=ans; //不是边界保存值 return ans; }int main(){ int t,cas=1; cin>>t; memset(dp,-1,sizeof(dp)); while(t--) { ll x,y; scanf("%I64u%I64u",&x,&y); //注意2^64次方 要用无符号64位读入 int cnt=0; while(y) { cnt++; numx[cnt]=x%10; x/=10; numy[cnt]=y%10; y/=10; } int ans=dfs(cnt,0,0,1,1); printf("Case %d: %d\n",cas++,ans==-1?0:ans); } return 0;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117374.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是线程死锁以及如何避免死锁「建议收藏」

    什么是线程死锁以及如何避免死锁「建议收藏」认识线程死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止,最终导致死锁产生。如下图所示,线程A持有资源2,线程B持有资源1,他们同时都想申请对方的资源,所以这两个线程就会因互相等待而进入死锁状态。线程死锁示意图下面通过一个例子来说明线程死锁,代码模拟了上图的死…

    2022年7月15日
    16
  • java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)[通俗易懂]

    java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)[通俗易懂]转载转载自:http://www.tuicool.com/articles/nMNVVjJava自带的数据加密类MessageDigest(MD5或SHA加密)说明:在网站中,为了保护网站会员的用户名和密码等隐私信息,所以我们在用户注册时就直接进行MD5方式或其他方式进行加密,即使是数据库管理员也不能查看该会员的密码等信息,在数据库中查看密码效果如:8e830882f03b2cb84d1a6…

    2022年7月17日
    12
  • dubbo负载均衡策略配置

    dubbo负载均衡策略配置前言在生产环境中,服务的集群部署是常有的事,从消费端来说,本身并不关注所需要的服务是由哪台机器提供,但是为了应用的健壮性和高可用性,从消费端来说,可以配置一定的负载均衡策略,确保消费端的应用能够及时获取到服务的响应数据dubbo负载均衡策略dubbo内置了四种负载均衡算法供开发中调用random随机算法,是Dubbo默认的负载均衡算法,多台机器上的服务随机选取一台的服务进行调用,如果各机器的性能相差不大的情况下,可以考虑使用这种策略。但这种策略可能存在服务堆积问题roundrobin轮询

    2022年7月11日
    20
  • eclipse SVN插件的缓存清理[通俗易懂]

    eclipse SVN插件的缓存清理[通俗易懂]工具原料:SVN客户端;windowxp;eclipse中的缓存清理主要有: eclipse清理网页缓存; eclipse清理XSD文件缓存; eclipse清理svn账号缓存; 情况一:eclipse清理网页缓存。修改了代码多次刷新页面[已经清除过浏览器缓存]后页面调试仍显示源代码解决步骤:①停止tomcat的运行;②在eclipse中的Servers下找到并选中tomcat,右键选择”clean…”;③重新启动tomcat,刷新页面;④设置b

    2022年10月14日
    3
  • mac navicat 激活码【永久激活】

    (mac navicat 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    135
  • 非阻塞recvfrom的设置[通俗易懂]

    非阻塞recvfrom的设置[通俗易懂]非阻塞recvfrom的设置

    2022年7月23日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号