博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题解——HDU 2089 不要62(数位DP)
阅读量:6817 次
发布时间:2019-06-26

本文共 933 字,大约阅读时间需要 3 分钟。

最近在学数位DP

应该是入门题吧

设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数

然后就是套路

注意\( limit \)的限制条件以及转移时候信息的记录,不能遗漏信息

代码写的记忆化搜索

#include 
#include
#include
using namespace std;int dp[100][2],a[100];int dfs(int pos,int pre,int limit,int state){ if(pos==-1) return 1; if(!limit&&dp[pos][state]!=-1) return dp[pos][state]; int up = limit?a[pos]:9; int mid=0; for(int i=0;i<=up;i++){ if(i==4) continue; if(pre==6&&i==2){ continue; } mid+=dfs(pos-1,i,limit&&i==a[pos],i==6); } if(!limit) dp[pos][state]=mid; return mid;}int solve(int x){ int con=0; memset(dp,-1,sizeof(dp)); memset(a,0,sizeof(a)); while(x){ a[con]=x%10; x/=10; con++; } return dfs(con,-1,true,false);}int main(){ int l,r; while(scanf("%d %d",&l,&r)==2&&l!=0&&r!=0) printf("%d\n",solve(r)-solve(l-1)); return 0;}

 

转载于:https://www.cnblogs.com/dreagonm/p/9583829.html

你可能感兴趣的文章
Oracle Hint的用法
查看>>
Postfix邮件系统
查看>>
《编写可读代码的艺术》读书文摘--第一部分 表面层次的改进
查看>>
使用Nodejs创建基本的网站 Microblog--《Node.js开发指南》 3
查看>>
网管工作是否值得做下去?
查看>>
神行者PD10-adb push逃脱ro权限
查看>>
JPA(四)之实体关系一对一
查看>>
如何使用羊驼自动生成缩略图的功能。
查看>>
定制化Azure站点Java运行环境(1)
查看>>
inotify用法简介及结合rsync实现主机间的文件实时同步
查看>>
php 判断手机登陆
查看>>
git 问题
查看>>
Fedora18设置终端快捷键 和 桌面快捷方式
查看>>
取消NavigationBar左右两边的空隙
查看>>
Ubuntu 12.04 Gedit中文乱码解决办法
查看>>
修改symfony sfDoctrineGuardPlugin验证密码的方法
查看>>
Vbird的Linux私房菜学习笔记之正则表达式-特殊字符
查看>>
数据的作用域
查看>>
js中括号用于自执行测试
查看>>
ssh 公钥 密钥
查看>>