HDU 3652 B-number(数位DP)

HDU 3652 B-number(数位DP)

大家好,又见面了,我是你们的朋友全栈君。

B-number

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

 

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 2
 
Author
wqb0039
 
 
题意
找包含13且被13整除的个数。
 
分析
能被13整除,只需要记录%13的值就好。那么如何找包含13的呢,我们需要记录当前最后一位的值,这样才可以从1 –》13。
dp[i][j][k][z]:i:处理的数位,j:该数对13取模以后的值,k:是否已经包含13,z结尾的数
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
int dp[12][15][2][10];
int bit[12];
int dfs(int pos,int num,bool t,int e,bool flag)
{
    if(pos==-1)return t&&(num==0);
    if(!flag && dp[pos][num][t][e]!=-1)
        return dp[pos][num][t][e];
    int end=flag?bit[pos]:9;
    int ans=0;
    for(int i=0;i<=end;i++)
        ans+=dfs(pos-1,(num*10+i)%13,t||(e==1&&i==3),i,flag&&(i==end));
    if(!flag)dp[pos][num][t][e]=ans;
    return ans;
}
int calc(int n)
{
    int pos=0;
    while(n)
    {
        bit[pos++]=n%10;
        n/=10;
    }
    return dfs(pos-1,0,0,0,1);
}
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n;
    memset(dp,-1,sizeof(dp));
    while(scanf("%d",&n)==1)
    {
        printf("%d\n",calc(n));
    }
    return 0;
}


 

 

转载于:https://www.cnblogs.com/fht-litost/p/8973679.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107552.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux设备树是什么?

    Linux设备树是什么?随着Linux的不断发展,基本上现在所有的驱动程序都是基于设备树的,而设备树到底是什么?有什么作用,Linux内核怎么通过设备树知道外设适配的。文本介绍了设备树、以及分享了一些设备树的基本语法、一些基本属性等,最后简单分析了设备匹配的基本流程

    2022年6月16日
    43
  • SpringMVC 运行流程[通俗易懂]

    SpringMVC的工作原理图:SpringMVC流程1、用户发送请求至前端控制器DispatcherServlet。2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherS…

    2022年4月4日
    50
  • Stata: 合成控制法 synth 命令无法加载 plugin 的解决办法

    Stata: 合成控制法 synth 命令无法加载 plugin 的解决办法 作者:陈勇吏(上海交通大学安泰经济与管理学院) Stata连享会:知乎|简书|码云|CSDNStata连享会 计量专题||精品课程||简书推文||公众号合集 连享会#金秋十月@空间计量专题(2019.10.24-27,成都)连享会:内生性问题及估计方法专题 合成控制法的常用命令synth在使用过程中,可能会出…

    2022年5月1日
    80
  • POSTMAN自动生成接口文档_接口测试用例自动生成工具

    POSTMAN自动生成接口文档_接口测试用例自动生成工具介绍drf-spectacular是为DjangoRESTFramework生成合理灵活的OpenAPI3.0模式。它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不

    2022年7月30日
    7
  • Select multiple多选上移、下移

    Select multiple多选上移、下移

    2021年10月17日
    109
  • C# UDP编程「建议收藏」

    C# UDP编程「建议收藏」引用:前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ、MSN和Skype等一些即时通信软件传输层都是应用UDP协议的)底层的传输基础,所以在本专题中就简单介绍下UDP的工作原理和UDP编程的只是,希望可以对刚接触网络编程的朋友起到入门的作用。一、UDP介绍UDP和TCP都是构建在IP层之上传输层

    2022年9月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号