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

题意:这题的题意有点晦涩难懂,大概意思就是给你一个区间,让你找一些满足递增递减条件的数,举个列:/-\,要匹配这个关系,把一个数字分成一列数位,满足先递增,然后相等,然后递减的关系:ie:123321,1221,123441,这些都满足/-\。

题解:设dp[i][j][k]表示考虑到第i位,上一个数为j,匹配关系到了k,然后DP下去就行了,注意处理左区间-1和前导零

 #include<cstdio>
#include<cstring>
#include<cmath>
#define F(i,a,b) for(int i=a;i<=b;i++)
typedef long long LL;
char ops[],a[],b[];
int dig[],st,len,oplen;
LL N=(LL)1e10,dp[][][]; int check(int pre,int now,int idx){
char c=ops[idx];
if(c=='/')return pre<now;
else if(c=='-')return pre==now;
return pre>now;
}
LL dfs(int pos,int idx=,int pre=,int z=,bool inf=){
if(!pos)return idx==oplen;
if(!inf&&~dp[pos][pre][idx])return dp[pos][pre][idx];
int end=inf?dig[pos]:;LL ans=;
F(i,,end){
if(!z)ans+=dfs(pos-,idx,i,z||i,inf&&i==end),ans%=N;
else if(idx<oplen&&check(pre,i,idx))
ans+=dfs(pos-,idx+,i,z||i,inf&&i==end),ans%=N;
else if(idx>&&check(pre,i,idx-))
ans+=dfs(pos-,idx,i,z||i,inf&&i==end),ans%=N;
}
if(!inf)dp[pos][pre][idx]=ans;
return ans;
} void f_ck(){
memset(dp,-,sizeof(dp));
oplen=strlen(ops);
for(st=,len=;a[st]=='';)st++;
int end=strlen(a);
for(int i=end-;i>=st;i--)dig[++len]=a[i]-'';
dig[]--;//处理左区间-1
for(int i=;dig[i]<;)dig[i]=,dig[i+]--;
LL tmp=(len==)?:dfs(len);
for(st=,len=;b[st]=='';)st++;
end=strlen(b);
for(int i=end-;i>=st;i--)dig[++len]=b[i]-'';
LL an=dfs(len)-tmp+N;
printf("%08lld\n",an%(LL)1e8);
} int main(){
while(~scanf("%s%s%s",ops,a,b))f_ck();
return ;
}

hdu_3886_Final Kichiku “Lanlanshu”(数位DP)的更多相关文章

  1. hdu 3886 Final Kichiku “Lanlanshu” 数位DP

    思路: dp[i][j][k]:满足在字符串的j位,前一位数字是k. 代码如下: #include<iostream> #include<cstdio> #include< ...

  2. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  3. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  4. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  5. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  7. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

  8. 数位DP入门

    HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...

  9. 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...

随机推荐

  1. javascript显式类型的转换

    显式类型转换目的:为了使代码变得清晰易读,而做显示类型的转换常使用的函数:Boolean(),String(),Number()或Object()如:Nunber(5) //5String(true) ...

  2. sql参数化查询避免注入漏洞的原因探析

    网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...

  3. APP测试--功能测试

    1.1 了解需求 这一点,不但是功能测试,是所有测试都需要的第1步.通过需求文档,与产品经理的沟通,与开发的沟通,用户的使用习惯等各方法,了解APP的需求. 1.2 编写测试用例 当然之前可能是测试计 ...

  4. Canvas基础讲义

    今天先花点简单的篇幅和大家介绍下canvas. 1. 基本篇 1.1. 什么是 Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 H ...

  5. MySQL python组件安装

    可使用pip进行安装 pip install MySQL-python 如出现以下错误 _mysql.c::: 错误:my_config.h:没有那个文件或目录 _mysql.c::: 错误:mysq ...

  6. iOS tableView的系统分割线定格设置以及分割线自定制

    一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView ...

  7. QTP脚本程序(原创自编)

    '编写哨位台程序测试脚本,实现功能如下:'1.自动添加100条查哨换岗人员记录,'2.自动添加美电.海康,大华视频.'3.自动配置视频设备.'4.检查后台进程是否存在.'5.视频轮巡.'####### ...

  8. 如何让linux时间与internet时间同步(centos)

    笔者在使用linux时(虚拟机),经常会发现使用一段时间后,linux时间和我的宿主机(真实机)的时间不一致,而宿主机的时间确实是internet时间,安装linux时选择的时区也是Asia/Shan ...

  9. Hunters

    Hunters Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submi ...

  10. abs与fabs的区别

    Python有五个标准的数据类型: 数字 int(整数) long(长整数) float(浮点实数值) complex(复数) 字符串 列表 元组 字典 abs与fabs的区别  abs是求整数的绝对 ...