hdu3886(数位dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3886
题意:给一定区间[A,B],一串由/,\,-组成的符号串。求满足符号串的数字个数。
#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)的更多相关文章
- [转]数位dp小记
转载自:http://blog.csdn.net/guognib/article/details/25472879 参考: http://www.cnblogs.com/jffifa/archive/ ...
- 数位DP 计划
通常的数位dp可以写成如下形式: [cpp] view plain copy int dfs(int i, int s, bool e) { if (i==-1) return s==target_s ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- 数位DP之奥义
恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...
随机推荐
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1. 导入一个托盘图标的资源(.ico)格式:资源ID为IDI_ICON1 2 ...
- OpenCV中遇到Microsoft C++ 异常 cv::Exception
我在实现<OpenCV2计算机视觉编程手册>第2章 2.2 节 存取像素值 中的椒盐噪声例子中遇到的程序错误. 原始输入程序: #include <opencv2/core/core ...
- hadoop学习;hadoop伪分布搭建
先前已经做了准备工作安装jdk什么的,以下開始ssh免password登陆.这里我们用的是PieTTY工具,当然你也能够直接在linux下直接操作 ssh(secure shell),运行命令 ssh ...
- ASP.NET - cookie
下面是写cookie HttpCookie cookie = new HttpCookie("Info");//定义cookie对象以及名为Info的项 DateTime dt ...
- 在springmvc中配置jedis(转)
主要学习https://github.com/thinkgem/jeesite.一下代码均参考于此并稍作修改. 1.jedis 首先,需要添加jedis: <!--jedis--> < ...
- 虚拟机安装中文Fedora14和C/C++IDE开发环境
虚拟机安装中文Fedora14和C/C++IDE开发环境 2010-12-05 00:15:58 标签:中文Fedora14 IDE 开发环境 C/C++ 原创作品,允许转载,转载时请务必以超链接形式 ...
- 海美迪Q系列视频文明书
海美迪Q系列视频文明书
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...
- ViEmu For VS2010 3.0 解除30天限制的方法
一.概述 首先,ViEmu试用版在安装时会记录安装的时间,用于判断是否已经过了限制的时间,这个时间记录在注册表中 以本人的机器(WIN7X64)为例,它记录在 HKEY_CLASSES_ROOT\Wo ...
- PL/SQL批处理语句(BULK COLLECT子句和FORALL语句)
Oracle为PL/SQL中的SQL相关功能提供了FORALL语句和BULK COLLECT子句,显著的增强了SQL相关功能.这两个语句一起被称作PL/SQL的批处理语句.Oracle为什么要提供这两 ...