http://acm.hdu.edu.cn/showproblem.php?pid=3652

题意:求数位含有13和可以被13整除的数字个数。

思路:记录3种状态:

st == 0 表示 从最高位到第 i 位既不包含 “13” 末尾也不包含 “1”。

st == 1 表示 末尾包含 “1”。

st == 2 表示 从最高位到第 i 位含有 “13”。

可以被 13 整除的话用一个参数来记录从最高位到第 i 位的和对 13 取模,当 mod == 0 && st == 2 的时候代表含有 “13” 并且可以被 13 整除。

 #include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define N 505
#define INF 0x3f3f3f3f
int dp[][][];
int bit[]; int dfs(int pos, int mo, int st, int limit)
{
if(pos <= ) return st == && mo == ;
if(limit && ~dp[pos][mo][st]) return dp[pos][mo][st];
int d = limit ? : bit[pos];
int ans = ;
for(int i = ; i <= d; i++) {
int ss = st;
int me = (mo * + i) % ;
if(st != && i != ) ss = ;
if(st != && i == ) ss = ;
if(st == && i == ) ss = ;
ans += dfs(pos - , me, ss, limit || i != d);
}
if(limit) dp[pos][mo][st] = ans;
return ans;
} int solve(int num)
{
int len = ;
while(num) {
bit[++len] = num % ;
num /= ;
}
return dfs(len, , , );
} int main()
{
int num;
while(~scanf("%d", &num)) {
memset(dp, -, sizeof(dp));
printf("%d\n", solve(num));
}
return ;
}

HDU 3652:B-number(数位DP)的更多相关文章

  1. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  2. HDU 5787 K-wolf Number 数位DP

    K-wolf Number Problem Description   Alice thinks an integer x is a K-wolf number, if every K adjacen ...

  3. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  4. HDU 5179 beautiful number 数位dp

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  5. hdu 5898 odd-even number(数位dp)

    Problem Description For a number,if the length of continuous odd digits is even and the length of co ...

  6. HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛

    题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...

  7. HDU 3652 B-number(数位dp)

    题意:B数的定义是有字符串“13”且能被整数13整除的数,求[1,n]内的B数个数. 题解:这是数位DP,我也就是刚入门,前两天看到了非递归写法,好麻烦.所以我建议写dfs的方法,容易理解,代码还简短 ...

  8. HDU 3652 B-number (数位DP,入门)

    题意: 如果一个整数能被13整除,且其含有子串13的,称为"B数",问[1,n]中有多少个B数? 思路: 这题不要用那个DFS的模板估计很快秒了. 状态设计为dp[位数][前缀][ ...

  9. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

  10. HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...

随机推荐

  1. new操作符做了什么??

    在javascript中,new操作符随处可见,我讲一下我自己对new操作符的理解... 构造函数无返回值 //测试代码 function Foo(name) { var age = 20; this ...

  2. iOS 归档

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  3. MySQL复制-设置延迟复制

    mysql> stop slave ; Query OK, 0 rows affected (0.00 sec) mysql> change master to master_delay= ...

  4. Oracle sqlldr导入导出txt数据文件详解

    一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSE ...

  5. Android之Handler,举例说明如何更新UI

    方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...

  6. 发现前端框架 bui-min.js

    http://www.builive.com/apps/default/main.html#menu/code http://www.builive.com/demo/grid-plugin.php# ...

  7. 鼠标放上去,不同的cursor光标类型

    <!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf ...

  8. Java基础之写文件——通过缓冲流写文件(StreamOutputToFile)

    控制台程序,生成一些二进制整型值并且将它们写入到文件中. import java.nio.file.*; import java.nio.*; import java.io.*; public cla ...

  9. 有关于break,continue,return的区别和代码分析

    今天,用代码和结果直接解释break,continue,return的区别 1.break代码 public static void breakTest() { //break的讲解 for(int ...

  10. c语言的基本语法

    1. 二目运算符从右往左 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象 ...