B-number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3434    Accepted Submission(s): 1921

Problem Description
A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string "13" and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task is to calculate how many wqb-numbers from 1 to n for a given integer n.
 
Input
Process till EOF. In each line, there is one positive integer n(1 <= n <= 1000000000).
 
Output
Print each answer in a single line.
 
Sample Input
13
100
200
1000
 
Sample Output
1
1
2

  感觉拿到题目后没有什么思路。
  
  去%了一发题解。
  
  发现状态可以是多种多样的。
  
  设f[i][b][j][m]表示i位,第i位为j,b=0代表当前数字没有13,b=1相反,m代表%13等于m的所有数字的个数。
  
  在预处理里面直接加判一些东西,至于那个count函数指第i位为j的所有数字从之前%13=m的数字转移来的时候要加的mod数。
  
  说的再清楚一点就是以前mod 13=m,现在=(count(i,j)+m)%13
  
  其余的非法情况什么的再判一下咯。。
 
  

 #include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring> using namespace std; int f[][][][]; int count(int x,int y)
{
for(int i=;i<x;i++)
y=y*%;
return y;
} void DP()
{
for(int i=;i<=;i++)
f[][][i][i]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
int mod=count(i,j);
for(int kk=;kk<=;kk++)
for(int ll=;ll<;ll++)
{
if(j== && kk==)f[i][][j][ll]+=f[i-][][kk][(ll-mod+)%];
else f[i][][j][ll]+=f[i-][][kk][(ll-mod+)%];
f[i][][j][ll]+=f[i-][][kk][(ll-mod+)%];
}
}
} int get(int x)
{
int num[],len=,res=;
while(x)
{
num[++len]=x%;
x/=;
}
for(int i=;i<num[len];i++)
res+=f[len][][i][];
for(int i=;i<=len-;i++)
for(int j=;j<=;j++)
res+=f[i][][j][];
int mod=count(len,num[len]),flag=;
for(int i=len-;i>=;i--)
{
for(int j=;j<num[i];j++)
{
res+=f[i][][j][(-mod)%];
if(flag || (j== && num[i+]==) )res+=f[i][][j][(-mod)%];
}
if(num[i]==&&num[i+]==)flag=;
mod=(mod+count(i,num[i]))%;
}
return res;
} int main()
{
int r;
DP();
while(~scanf("%d",&r))
printf("%d\n",get(r+));
return ;
}

【数位DP】Hdu 3652:B-number的更多相关文章

  1. 数位DP || Gym 101653R Ramp Number

    每一位都大于等于前一位的数叫Ramp Number 给一个数,如果不是Ramp Number输出-1,如果是Ramp Number输出比它小的Ramp Number的个数 只和每一位上的数字有关 #i ...

  2. 2019年9月训练(壹)数位DP (HDU 2089)

    开学之后完全没时间写博客.... HDU 2089 不要62(vjudge) 数位DP 思路: 题目给出区间[n,m] ,找出不含4或62的数的个数 用一个简单的差分:先求0~m+1的个数,再减去0~ ...

  3. 数位DP HDU - 2089 不要62

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. [数字dp] hdu 3565 Bi-peak Number

    意甲冠军: 为了范围[X,Y],的最大位数的范围内的需求高峰和值多少. 双峰是为了满足一些规定数量 你可以切两 /\ /\ 形式. 思维: dp[site][cur][ok]  site地点  面的数 ...

  5. hdu 5898 odd-even number 数位DP

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

  6. HDU 5787 K-wolf Number (数位DP)

    K-wolf Number 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5787 Description Alice thinks an integ ...

  7. 【HDU 3652】 B-number (数位DP)

    B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer whose de ...

  8. 【HDU 3709】 Balanced Number (数位DP)

    Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...

  9. Hdu 3652 B-number (同余数位DP)

    题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.d ...

  10. hdu 3652 【数位dp】

    hdu 3652 题意:求1到n中包含'13'('13'不一定连续)且能被13整除的数的个数. 这是我第一道比较了能看懂的数位dp.定义状态dp[pos][res][sta]表示处理到第pos位,模的 ...

随机推荐

  1. Jersey(1.19.1) - XML Support

    As you probably already know, Jersey uses MessageBodyWriters and MessageBodyReaders to parse incomin ...

  2. Ehcache(2.9.x) - API Developer Guide, Searching a Cache

    About Searching The Search API allows you to execute arbitrarily complex queries against caches. The ...

  3. ios app名字的多语言支持

    经测试,不同版本的xcode会有操作细节不同,本次环境xcode6.4 1)编辑Info.plist,添加一个新的属性Application has localized display name, 设 ...

  4. sqlserver之二进制和字符串sql语句

    正常情况下我们对数据库的操作就是如下的写法来操作数据库 ID AS 编号,BookName AS 书名 FROM dbo.books ORDER BY ID; ; 但是在客户正在使用的数据库里,我们开 ...

  5. Convert Windows 32bit dirver to Windows 64bit

    Pre-condition: 1.source code(vc6.0+WDK based) Development environment: 2.VS2013 3.WDK 8/8.1 Steps: 1 ...

  6. iOS开发——锁屏监听

    公司所做的项目,锁屏监听是为了60秒后,解锁瓶后显示[手势解锁]或[指纹验证]: 第一步:AppDelegate.m 头部导入 #import <notify.h> #define Not ...

  7. win7下64位系统memcache/memcached安装教程

    折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别  在自己的新程序中打算全面应用memcached ...

  8. private继承

    private继承并不如public继承一样具有is-a的关系. ------------------------------------------------------------------- ...

  9. java.util.ArrayList源码分析

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  10. 多项分布(multinominal distribution)

    简介 更一般性的问题会问:“点数1~6的出现次数分别为(x1,x2,x3,x4,x5,x6)时的概率是多少?其中sum(x1~x6)= n”.这就是一个多项式分布. 定义 把二项分布推广至多个(大于2 ...