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

题意:给一定区间[A,B],一串由/,\,-组成的符号串。求满足符号串的数字个数。

•/表示数字从左到右递增
•\表示数字从左到右递减
•-表示数字从左到右相等
分析:dp[i][j][k],表示当枚举到第i位的数,匹配str[j],前一位是k,满足要求的数字个数.
 
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define N 100010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int dp[][][];
int dig[],len;
char str[],a[],b[];
int judge(int i,int pre,int now)
{
if(str[i]=='/')return pre<now;
else if(str[i]=='-')return pre==now;
else if(str[i]=='\\')return pre>now;
}
int dfs(int pos,int cur,int pre,int limit,int fzore)
{
if(!pos)return cur==len;
if(!limit&&~dp[pos][cur][pre])return dp[pos][cur][pre];
int ed=limit?dig[pos]:;
int ans=;
for(int i=;i<=ed;i++)
{
if(!fzore)
{
if(cur<len&&judge(cur,pre,i))
ans+=dfs(pos-,cur+,i,limit&&i==ed,fzore&&!i);
//这里为什么能往回走,因为如果pre,i满足str[cur-1],同时
//已经知道“pre前一位,pre”也满足str[cur-1],这样还是满足要求的数
//例如数据123455555554321是符合/-\的,5之前都是/,中间都是-,后面都是\。
else if(cur&&judge(cur-,pre,i))
ans+=dfs(pos-,cur,i,limit&&i==ed,fzore&&!i);
}
else ans+=dfs(pos-,cur,i,limit&&i==ed,fzore&&!i);
ans%=mod;
}
if(!limit)dp[pos][cur][pre]=ans;
return ans;
}
int solve(char s[],bool left)
{
int lens=strlen(s),m=,i=;
while(s[i]==''&&i<lens)i++;
for(int j=lens-;j>=i;j--)dig[++m]=s[j]-'';
if(left&&m)
{
for(int i=;i<=m;i++)
{
if(dig[i])
{
dig[i]--;break;
}
else dig[i]=;
}
}
return dfs(m,,,,);
}
int main()
{
while(scanf("%s",str)!=EOF)
{
len=strlen(str);
scanf("%s%s",a,b);
memset(dp,-,sizeof(dp));
printf("%08d\n",((solve(b,)-solve(a,))+mod)%mod);
}
}

hdu3886(数位dp)的更多相关文章

  1. [转]数位dp小记

    转载自:http://blog.csdn.net/guognib/article/details/25472879 参考: http://www.cnblogs.com/jffifa/archive/ ...

  2. 数位DP 计划

    通常的数位dp可以写成如下形式: [cpp] view plain copy int dfs(int i, int s, bool e) { if (i==-1) return s==target_s ...

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

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

  4. bzoj1026数位dp

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

  5. uva12063数位dp

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

  6. HDU2089 不要62[数位DP]

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

  7. 数位DP GYM 100827 E Hill Number

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

  8. 数位dp总结

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

  9. 数位DP入门

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

  10. 数位DP之奥义

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

随机推荐

  1. wifi定位原理

    wifi定位和手机基站定位类别似,两者都需要收集wifi位置信息接入点. 其实WIFI奇妙,它靠的是侦測附近周围全部的无线网路基地台 (WiFi Access Point) 的 MAC Address ...

  2. Android手势识别(单击 双击 抬起 短按 长按 滚动 滑动)

    对于触摸屏,其原生的消息无非按下.抬起.移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理.不过,为了提高我们的APP的用户体验,有时候我们 ...

  3. Jrebel 6.2.1破解

    个人微信:benyzhous,可以一起探讨 云盘下载链接: http://pan.baidu.com/s/1bnGzMUF 配置: -noverify -javaagent:/Users/chabab ...

  4. 使用commons-daemon启动、关闭java程序

    系统环境: CentOS 7 X64 JDK1.8 一: 安装jsvc 下载 commons-daemon的源代码包 http://apache.fayea.com//commons/daemon/s ...

  5. WTL介绍

    WTL简单介绍 关键词: WTL WTL是一个好东东.它开发的程序都很短小精悍.对开发WIN32的应用有很好的优点.它不用MFC开发.但可以高速产生窗体和控件. 以文本方式查看主题 -  温馨小筑   ...

  6. unity3d游戏开发学习之使用3dmax创建导弹模型

    在着手研究Unity3D的游戏开发时,3D模型能够考虑从unity的assets store去获取,也能够从网上搜索下载,同一时候咱们也能够尝试下自己动手去做一些简单的模型. 这里就依据unity3d ...

  7. ubuntu安装iscsi

    ubuntu安装iscsi target端:apt-get install iscsitarget ubuntu安装iscsi initiator端:apt-get install open-iscs ...

  8. Dom4j SAXReader Constructors

    Dom4j读取xml:eg1: package xml; import java.io.File; import org.dom4j.DocumentException; import org.dom ...

  9. C/C++中char* 与char []定义的区别

    转载请注明来自souldak,微博:@evagle Question: 给你一个字符串例如abb输出它包含的字符的所有可能排列. 例如abb输出3个:abb,bab,bba Answer: 假设我们自 ...

  10. 浅解ARC中的 __bridge、__bridge_retained和__bridge_transfer

    文章来源:http://www.outflush.com/2015/03/introduction-of-arc-bridge-type-transfer/ 在对 bridge 相关的修饰符解说前.首 ...