题目链接:

  Hdu 3652 B-number

题目描述:

  给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串?

解题思路:

  能整除的数位DP,确定好状态随便搞搞就能过了。dp[x][mod][y][z] 表示 x位的整数,mod 13 等于几, y表示是否出现过13, 最后一位是z。
  还有就是发现记忆化搜索 + 数位dp写出来真的很美讷。不说了,直接上代码,干净粗暴。

#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
int dp[maxn][maxn][maxn][maxn], bit[maxn]; int dfs (int pos, int mod, bool s, int num, bool flag)
{
if (pos == -) //每个位置都满了
return mod== && s; //满足题意返回true //对于flag==1的时候,还是要向下搜索的,直接返回可能会加多
if (!flag && dp[pos][mod][s][num] != -)
return dp[pos][mod][s][num]; //如果前面的数都是等于n的,辣么当前这位也不能大于bit[pos]
int len = flag?bit[pos]:;
int ans = ; for (int i=; i<=len; i++)
ans += dfs (pos-, (mod*+i)%, s||(num==&&i==), i, flag&&(i==len)); if (!flag)
dp[pos][mod][s][num] = ans;
return ans;
}
int solve (int n)
{
int pos = ;
while (n)
{
bit[pos ++] = n % ;
n /= ;
}
return dfs (pos-, , , , );
} int main ()
{
int n;
memset (dp, -, sizeof(dp)); while (scanf ("%d", &n) != EOF)
printf ("%d\n", solve (n));
return ;
}

最新文章

  1. Mac Pro 资源管理器 Double Commander“个性化设置” 备份
  2. Android 中获得notification的发出时间
  3. 面向对象编程(十)——继承之Super关键字及内存分析
  4. HDOJ-三部曲一(搜索、数学)- A Knight&#39;s Journey
  5. 编写你的第一个 Django 程序 第1部分
  6. 逆序对的相关问题:bzoj1831,bzoj2431
  7. ASP.NET MVC 3 Razor Views in SharePoint
  8. CSS实现倒影-------Day80
  9. 查看mysql字符集及修改表结构
  10. sqlserver 自学笔记之 常量,变量及函数
  11. Oracle解锁的相关操作(转)
  12. 二分查找(binary search)
  13. Linux安装JDK步骤
  14. HighCharts之气泡图
  15. CXF整合spring
  16. eclipse代码提示设置过常用字符还是不起作用的解决方法
  17. 大数据与云计算的关系是什么,Hadoop又如何参与其中?Nosql在什么位置,与BI又有什么关系?
  18. 基于TcpListerer的web服务器 和 基于HttpListerer的web服务器
  19. kbmMWUnidac直接SQLServer
  20. fork()、vfork()、clone()和exec()

热门文章

  1. 翻译:A Tutorial on the Device Tree (Zynq) -- Part V
  2. notepad++的f90配置文件
  3. iOS之Prefix.pch
  4. 基于mqtt协议实现手机位置跟踪
  5. Xamarin Android 记事本(三)删改
  6. ios实现倒计时的两种方法
  7. mysql无法远程访问
  8. vscode中检测代码中的空白行并去除的方法【转】
  9. 基于Delphi7 WebService 在Apache发布及Apache使用说明
  10. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)