hdu_2089_不要62(数位DP)
2016-05-29 13:53
281 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
题意:中文,不解释
题解:dp[i][j]表示当前第i位的前一个数为j,然后记忆化dfs,注意的是给的是一个区间,容斥完后要处理大的那个数
#include<cstdio> #include<cstring> #define F(i,a,b) for(int i=a;i<=b;i++) int dp[10][10],n,m,dig[7],len,ans1,tmp,fg,pre; int dfs(int pos,int pre,bool inf){ if(!pos)return !inf; if(!inf&&dp[pos][pre]!=-1)return dp[pos][pre]; int end=(inf?dig[pos]:9),ans=0; F(i,0,end)if(!(pre==6&&i==2||i==4))ans+=dfs(pos-1,i,inf&&(i==end)); if(!inf)dp[pos][pre]=ans; return ans; } int main(){ memset(dp,-1,sizeof(dp)); while(~scanf("%d%d",&n,&m),n+m){ for(len=0;n;)dig[++len]=n%10,n/=10; ans1=dfs(len,0,1); for(tmp=m,fg=1,pre=-1;tmp;pre=tmp%10,tmp/=10) if(tmp%10==4)fg=0;else if(tmp%10==6&&pre==2)fg=0; for(len=0;m;)dig[++len]=m%10,m/=10; printf("%d\n",dfs(len,0,1)+fg-ans1); } return 0; }View Code
相关文章推荐
- task
- JAVA中获取工程路径的方法
- 算法3—找出字符串中对称的子字符串的最大长度(最长回文)
- WAS(Websphere) 7升级到8.5遇到的头疼Verify Error问题
- Logcat调试信息
- java 利用POI 导入导出初步学习
- 数据库JDBC
- “我的天哪,吉香缘
- androidAnnotation 在androidstudio 中配置的正确配置,绝对可用
- 二叉树打印
- 作业——在线学习Android课程之第十三周(视图优化案例)
- eclipse中使用git
- php笔记(5)——文件操作
- libevent学习笔记(参考libevent深度剖析)
- Oracle默认的用户名和密码
- 配置hibernate根据实体类自动建表功能
- Build caffe fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope)
- thinkphp集成系列之phpmailer批量发送邮件
- thinkphp集成系列之phpmailer批量发送邮件
- Centos7 初试docker