HDU 3652 B-number(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP G - B-number
题意
求1~n的范围里含有13且能被13整除的数字的个数。
思路
首先,了解这样一个式子:a%m == ((b%m)*c+d)%m;
式子的正确是显然的。就不证明了。
那么推断数能否够被13整除就能够分解为一位一位进行处理。
当然。我们也仅仅须要储存取余后的值。
dfs(len, num, mod, flag)
mod记录数字对13取余后的值
len表示当前位数
num==0 不含13且上一位不为1
pre==1 不含13且上一位为1
pre==2 含13
flag表示能否够随意取值(推断范围)。
如此,记忆化搜索就可以得解。
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
#define LL long long
#define MOD 13
LL dp[20][3][13];
int dis[20];
LL dfs(int len, int type, int mod, bool flag)
{
if(len < 0)
return type == 2 && mod == 0;
if(!flag && dp[len][type][mod]!=-1)
return dp[len][type][mod];
int end = flag?
dis[len]:9;
int ans = 0;
for(int i=0; i<=end; i++)
{
if(type == 2 || (type == 1 && i == 3))
ans += dfs(len-1, 2, (mod*10+i)%MOD, flag&&i==end);
else
ans += dfs(len-1, i==1?1:0, (mod*10+i)%MOD, flag&&i==end);
}
if(!flag)
dp[len][type][mod] = ans;
return ans;
}
LL solve(LL n)
{
int len = 0;
while(n)
{
dis[len++] = n%10;
n /= 10;
}
return dfs(len-1, 0, 0, 1);
}
int main()
{
int n;
memset(dp, -1, sizeof(dp));
最新文章
- JavaScript获取浏览器高度和宽度值
- Jquery---用jQuery实现的智能隐藏、滑动效果的返回顶部代码
- 《Head First HTML&;CSS》笔记
- Android自动关机代码
- centos安装python gcc sqlite
- 49-Group Anagrams-(Medium) 题解
- 英特尔:不再公布PC处理器多核睿频数据
- IPFS: Merkle DAG数据结构
- HTTP协议与TCP/IP协议
- SQL运行优化收藏
- 在flask中使用swagger(flasgger使用方法及效果展示)
- OSC Source Code Innovation Salon(2018.10.20)
- SharePoint自定义程序页面部署 不用重启IIS
- oracle 、mysql、 sql server使用记录
- 程序员面试50题(1)—查找最小的k个元素[算法]
- 性能调优之MySQL篇二:MySQL配置文件My.ini配置文件优化
- C++进阶3.字节对齐 联合
- Qracle、Sql server 、mysql查询练习题
- 我的Java修养
- 在windows7 32ibt安装MongoDB数据库的方法及连接失败解决方案
热门文章
- CF16A Flag
- POJ 1107
- selenium的报错信息:selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted
- 【大话QT之十】实现FTP断点续传
- c++:数据类型的推断type_traits
- node12---mongodb
- m_Orchestrate learning system---十九、局部变量和块变量是什么
- Linux就该这么学 20181003(第四章Vim/shell/测试条件)
- Linux下安装ipython与jupyter
- 跨域调用接口——WebClient通过get和post请求api