题目连接: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. iOS10访问用户权限的描述key值汇总

    https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Ar ...

  2. 模型驱动 ModelDriven

    ModelDriven:模型驱动,对所有action的模型对象进行批处理. 我们在开发中, 在action中一般是用实体对象,然后给实体对象get,set方法. RegAction{ User use ...

  3. Flask -- 内容管理系统

    例子: # content_manager.py # 把TOPIC存在一个字典里,key为关键字,value为二维数组# TOPIC_DICT['Django'][0]为Title,TOPIC_DIC ...

  4. ios xcode中所有自带的字体如下(最好结合NSMutableAttributedString相结合使用)

    // 打印系统中所有字体的类型名字 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in familyNam ...

  5. DOM操作-克隆元素

    代码: ———————————————————————————— <script type="text/javascript">            //克隆元素   ...

  6. js 交换表单中值

    <html> <head> <meta charset="utf-8" /> <script type="text/javasc ...

  7. velocity 教程

    1,<title> $!{product.name} - $!{title} $!{about.title} - $!{title} $!{news.title} - $!{title} ...

  8. SSH登录很慢问题的解决方法

    用ssh连其他linux机器,会等待10-30秒才有提示输入密码.严重影响工作效率. 关闭ssh的gssapi认证 用ssh -v user@server 可以看到登录时有如下信息: debug1: ...

  9. 制作 macOS Sierra 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)

    使用命令行创建制作 macOS Sierra 正式版 USB 安装盘 1.准备一个 8GB 或更大容量的 U盘,并备份好里面的所有资料. 2.下载好 macOS Sierra 正式版的安装程序(app ...

  10. inserted触发器,一张表插入数据时,同时向另外一张表插入数据

    有时候,一个服务器上有多个数据库,需要向其中一个数据库的表中插入数据时, 同时向另外一个数据的表里插入数据. 可以利用触发器和同义词(建立同义词的方法省略), 在一个数据库的表里插入数据时,同时向另外 ...