HDU 3886
一开始又往打表想了。。。。不过,打表确实不好处理,转DFS。
DFS有几个要注意的问题,1、对于枚举以零开始的数。我纠结了很久,最终学习别人的方法,设一个BOOL,并且假设最高一位有零,很方便。2、当枚举到字符串最后一位的情况3、对于连续的相同字符的处理,可以当一符合字符位置移动时,枚举的指针立即移动
呃。。我的不知为何WA了。。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string.h>
#include <algorithm>
#define M 100000000
using namespace std;
const int N=110;
int dp[N][N][10];
char A[N],B[N];
char str[N];
int digit[N],lenstr; bool judge(int i,int u,int v){
if(str[i]=='/') return u<v;
if(str[i]=='-') return u==v;
if(str[i]=='\\') return u>v;
} int dfs(int len,int pos,int k,bool zero,bool flag){
if(len==0){
return pos==lenstr+1;
}
if(!flag&&dp[len][pos][k]!=-1)
return dp[len][pos][k];
int en=flag?digit[len]:9;
int ans=0;
for(int i=0;i<=en;i++){
if(zero) ans=(ans+dfs(len-1,pos,i,zero&&i==0,flag&&i==en));
else if(pos<=lenstr&&judge(pos,k,i)) ans=(ans+dfs(len-1,pos+1,i,zero,flag&&i==en));
else if(pos>1&&judge(pos-1,k,i)) ans=(ans+dfs(len-1,pos,i,zero,flag&&i==en));
ans%=M;
}
if(!flag) dp[len][pos][k]=ans;
return ans;
} int cal(char *s,bool f){
int l=strlen(s+1);
int len=0;
for(int i=l;i;i--){
digit[++len]=s[i]-'0';
}
while(digit[len]==0) len--;
lenstr=strlen(str+1);
if(f&&len>1){
for(int i=1;i<=len;i++){
if(digit[i]){
digit[i]--;
break;
}
else digit[i]=9;
}
}
return dfs(len,1,0,true,true);
}
int main(){
while(scanf("%s",str+1)!=EOF){
cin>>A+1>>B+1;
cout<<B+1<<endl;
memset(dp,-1,sizeof(dp));
printf("%08d\n",((cal(B,false)-cal(A,true))+M)%M);
}
return 0;
}
COPY别人的过的,就是这篇启发我处理前导零的问题
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define M 100000000
using namespace std;
char str[101],a[101],b[101];
int len,bit[101],dp[101][101][10];
bool ok(int i,int u,int v)
{
if(str[i]=='/') return u<v;
if(str[i]=='-') return u==v;
if(str[i]=='\\') return u>v;
}
int dfs(int pos,int j,int pre,bool h,bool f)
{
if(pos==-1) return j==len;
if(!f&&dp[pos][j][pre]!=-1) return dp[pos][j][pre];
int ans=0;
int e=f?bit[pos]:9;
for(int i=0;i<=e;i++){
if(h) ans+=dfs(pos-1,j,i,h&&i==0,f&&i==e);
else if(j<len&&ok(j,pre,i)) ans+=dfs(pos-1,j+1,i,h,f&&i==e);
else if(j>0&&ok(j-1,pre,i)) ans+=dfs(pos-1,j,i,h,f&&i==e);
ans%=M;
}
if(!f) dp[pos][j][pre]=ans;
return ans;
}
int solve(char an[],bool f)
{
int m=0,i,j=0,le=strlen(an);
while(an[j]=='0') j++;
for(i=le-1;i>=j;i--) bit[m++]=an[i]-'0';
if(f&&m>0){
for(i=0;i<m;i++){
if(bit[i]){
bit[i]--;
break;
}
else bit[i]=9;
}
}
return dfs(m-1,0,0,1,1);
}
int main()
{
int i,j,k,m,n;
while(scanf("%s",str)!=EOF){
len=strlen(str);
scanf("%s%s",a,b);
memset(dp,-1,sizeof(dp));
printf("%08d\n",(solve(b,0)-solve(a,1)+M)%M);
}
return 0;
}
HDU 3886的更多相关文章
- hdu 3886 Final Kichiku “Lanlanshu” 数位DP
思路: dp[i][j][k]:满足在字符串的j位,前一位数字是k. 代码如下: #include<iostream> #include<cstdio> #include< ...
- dfs序题目练习
参考博文:http://blog.csdn.net/qwe2434127/article/details/49819975 http://blog.csdn.net/qq_24489717/artic ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- spring的bean管理(注解和配置文件混合使用)
1.建三个类,在一个类中引用其他两个类 import javax.annotation.Resource; import org.springframework.beans.factory.annot ...
- ActionFilterAttribute
https://msdn.microsoft.com/en-us/library/system.web.mvc.actionfilterattribute.onactionexecuting(v=vs ...
- FH Admin
http://www.360doc.com/content/14/0713/08/8072791_394027312.shtml
- [牛客挑战赛 30D] 小A的昆特牌 解题报告 (组合数学)
interlinkage: https://ac.nowcoder.com/acm/contest/375/D description: solution: 我们枚举步兵的数量$x$,还剩下$S-x$ ...
- 43.qt通过qss自定义外观
样式: 文件格式类型: candy.qss /* R1 */ QDialog { /*设置背景图片*/ background-image: url(:/images/background.png); ...
- numpy快速指南
Quickstart tutorial 引用https://docs.scipy.org/doc/numpy-dev/user/quickstart.html Prerequisites Before ...
- DDL:对数据库___database___的相关操作,包含数据库备份,导入
1.创建数据库 create database mydb2; create database mydb2 character set utf8; 2.删除数据库 drop database mydb2 ...
- Hadoop MapReduce编程 API入门系列之分区和合并(十四)
不多说,直接上代码. 代码 package zhouls.bigdata.myMapReduce.Star; import java.io.IOException; import org.apache ...
- MapReduce架构与生命周期
MapReduce架构与生命周期 概述:MapReduce是hadoop的核心组件之一,可以通过MapReduce很容易在hadoop平台上进行分布式的计算编程.本文组织结果如下:首先对MapRedu ...
- 实现model中的文件上传FTP(二)
上一篇博客记录了如何将model中的图片存入FTP,通过一个第三方的storages简单的实现了,但是后续我发现如果想在浏览器通过url直接获取图片,就不太容易了(大神轻喷,小弟自学django和py ...