HDU - 3652 B-number 数位dp

初探数位dp.pdf lazycal的集训队报告:初探数位DP 以HDU 2089,HDU 3652, URAL 1057等题目为例,介绍了数位DP的算法 立即下载

B-number

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


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
 

Source


题意是求1~n里有多少个数,数位上有13存在且这个数取余13==0

数位dp

state:1,:前一位是1    2:前面有13出现    否则0

当时不知道怎么满足取余13等于0,其实按位数的权值一位一位的加,并膜13,只保留余数即可

这样:dp【位数】【state】【余数】

核心是想到记录余数这个状态,只有前面的余数相同,后面能取的个数才和之前求并记忆的一样

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#define eps 1e-9
#define PI 3.141592653589793
#define bs 1000000007
#define bsize 256
#define MEM(a) memset(a,0,sizeof(a))
#include<iostream>
typedef long long ll;
using namespace std;
int dp[100][3][15];
int a[100];
int dfs(int pos,int state,int limit,int yu,long long t)
{
	if(pos==-1)
    {
        return state==2&&yu==0;
    }

	if(!limit&&dp[pos][state][yu]!=-1)
	return dp[pos][state][yu];
	int up=limit?a[pos]:9;
	int ans=0;
	int now;
	for(int i=0;i<=up;i++)
	{
        if(state==2)
            now=2;
	    else if(state==1&&i==3)
            now=2;
        else if(i==1)
            now=1;
        else
            now=0;
		ans+=dfs(pos-1,now,limit&&i==a[pos],(yu+i*t)%13,t/10);
	}
	if(!limit&&dp[pos][state][yu]==-1)
    {
        dp[pos][state][yu]=ans;
    }
    return ans;
 }
 int solve(int x)
 {
     int pos=0;
     long long t=1;
     while(x)
     {
         a[pos++]=x%10;
         x/=10;
         t*=10;
     }
     return dfs(pos-1,0,1,0,t/10);
 }
int main()
{
    int n;
    memset(dp,-1,sizeof(dp));
    while(~scanf("%d",&n))
    {
        printf("%d\n",solve(n));
    }
    return 0;
 }


头歌平台-人工智能导论实验(人脸识别) 答案仅供参考,自己动手丰衣足食!!! 阅读详情

相关推荐

Docker 安装 CentOS7

本文主要介绍了docker 下安装centos7。访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。可以通过 Sort by 查看其他版本的 CentOS 。默认是最新版本 centos:latest 。 使用以下命令来查看是否已安装了 centos7: 启动centos容器,并把docker上centos的22端口映射到本机60001端口(端口号可以自己指定) 3、进入到Centos容器 4.安装ssh服务和网络必须软件

折腾java的博客 1万+

hdu 3652 (数位dp 模板题)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意: 求1到n之间含有13且能被13整除的个数。 解题思路: 就是“不要49”的加强版,在设置状态时需要多用一维,用于判断是否整除13。很容易的可以想到,多出来的一维可以表示当前位除以13的余数。 这样状态设置:dp[pos][mod][status] ,

霞之丘诗羽的博客 479

EDA课程实验:《数字逻辑电路》实验四___基于Minisys 平台 VIVADO工具与Verilog语言

(4)使用 Verilog HDL 实现一个分频器 clock_div,输入的是系统提供的 100MHz 频率,输出的是 1Hz 频率,占空比是 1:2,(实际上可以用一个加 1 计数器来实现降频,输入的是一个 100MHz 频率的方波,对这 个方波计数 1 亿次刚好到 1 秒(1Hz),题目要求输出频率占空比是 1:2,也就是这个 1Hz 的 方波高电平和低电平各 500ms,可以采用计数到中间值的时候输出电平翻转。(1)1) 拨动 SW1~0 为 01,按下 P4 按钮,GLD1~0 为 01;

ssjy_的博客 1296

HDU3652(数位dp)

解题思路:和HDU2089相对,数位dp目前我看到两种写法。一种是初始化好dp,后面直接用,这种适用于范围比较小的时候。还有一种就是在做道题,直接带入dfs,一个询问一次dp.代码中的lim代表是不是可以0——9随便取,即限制他不能大于输入的n.总体然说感觉就是个记忆化搜索。dp[pos][sts][mo],中pos代表第pos位数,sts代表在pos-1前的状态(0表示前面没有13出现,且pos...

qq_39861441的博客 296

基于拟蒙特卡洛模拟法的随机潮流计算matlab程序

由式(4-11)可知,蒙特卡洛模拟法的计算量不受电力系统规模大小影响,因此该方法在一些复杂的电力系统中可以得到应用,包括处理电力系统中有多个间歇性新能源接入的问题,解决系统中多个节点之间相关性问题等等。本章在此基础上提出了基于拟蒙特卡洛模拟的随机潮流计算方法,并且对拟蒙特卡洛法中的拟随机数序列进行了改进,大大提高了随机潮流的计算效率。模拟法的具体思路如下:基于实际工程问题的求解需要,建立与之相对应的随机模拟过程和随机概率模型,使得它们的参数,包括概率分布或者数学期望,能够等于问题的实际解;

weixin_47365903的博客 1794

电池建模 004- Battery (Table-Based)表格化电池模型入门学习

对于 Battery (Table-Based) 模块,提供了多种内置参数。该预参数化数据允许您将模块设置为代表特定供应商的组件。这些电池的参数化可以与制造数据表中的放电曲线相匹配。要加载预定义的参数化,双击 Battery (Table-Based) 模块,点击 Selected part 参数中的 超链接,然后在块参数化管理器窗口中,从可用组件列表中选择所需部件。 (默认)选项用于参数化模块,以代表特定供应商的组件。

qq_63860930的博客 2734

hdu 3652 数位dp+记忆化搜索

题意:输出1~n内含有子序列“13”并且能被13整除的数的个数 题解:数位dp 记忆化搜索 1.想到整除应想到余数。 2.dp[i][j][0]表示i位数、余数为j、末尾不为1且不包含13的数的个数。    dp[i][j][1]表示i位数、余数为j、末尾为1且不包含13的数的个数。    dp[i][j][2]表示i位数、余数为j、包含13的数的个数。 3.按照题意采用记忆化搜索进行...

Irving0323的博客 294

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9230

HDU 3652 B-number 数位dp

G - B-number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3652 Appoint description:  System Crawler  (2016-04-22) Description

MY Blog 581

汽车工程师必看:从CAN到Ethernet,6种车载通信协议全解析(附应用场景对比)

本文全面解析了从CAN到Ethernet的6种车载通信协议,包括CAN、LIN、MOST、FlexRay等,并对比了它们的应用场景和技术特点。文章详细介绍了各协议的演进历程、技术优势及在现代汽车中的混合网络架构设计,为汽车工程师提供了实用的协议选型指南和未来通信技术发展趋势。

weixin_28683689的博客 491

PHP服务端 苹果支付(IAP)处理

公司做的app需要做IAP订阅支付,开始觉得和微信的支付流程差不多,做起来还是有点麻烦,主要是网上的文章很少,不能拿来主义。自己做完总结一下,希望对小伙伴们有帮助我就很欣慰了。代码写的不好 不要喷我。。。 首先讲一下我的业务逻辑,也就是php服务端需要做什么事情。 先上图: 下面我详细的讲一下每...

山水的博客 1万+

hdu3652(数位DP)

这道比较繁琐。。除了处理13之外还得处理整除,这样就无法用排除的方式筛选了。。 方程大概是这样的。。d[i][j][k][v]为扫到i位,末位为j,余数为v(假设后面全为0),k代表前面是否找到13 然后转移按照题目要求转移,这对记忆化搜索来说不难。。 方程维数增多对想出方程和实现过程都带来了一定难度。。所以还是得适应高维的方程才行。。 然后需要注意的是满足题目要求的并不多。。即d里面有很

qkoqhh 297

提示工程从初级到高级:如何评估提示词的鲁棒性?架构师分享测试方法

鲁棒性(Robustness)原本是工程领域的概念,指系统在“非理想条件”下保持性能稳定的能力。输入鲁棒性:面对不规范、有噪音、格式变异的用户输入,提示能否引导模型输出正确结果?模型鲁棒性:同一提示在不同大模型(或同一模型的不同版本)下,输出是否一致?场景鲁棒性:在边界场景(极端case、歧义case、多任务混合)下,提示能否保持逻辑一致性?提示词V1:请将以下用户评论分类为「正面」「中性」或「负面」:{comment}。要求:输出唯一类别,不要额外说明。

小程序开发 496

【数位DP-三维dp数组】HDU 3652 B-number

HDU 3652 B-number 题意:给一个数n,求区间[1, n]中具有连续13,并且可以可以被13整除的数的个数。 思路:对于一个数来说,它有两个固有性质。1:是不是13的倍数. 2:有没有连续数位为13. 我们的dp数组如何来表示出所谓无后效性就很重要。我们可以用一维来表示是不是满足性质2,再用一维表示它mod13的余数。那么dp也就是一个三维数组。 实践证明两维真的不可。第一道...

L_X_ 387

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

(数位dp)HDU3652B-number

HDU3652 B-number 题意&思路: 找出1~n中含有13并能被13整除的数字个数。 纠结了好久,状态真的是差。 dp[len][p13][mod]三个参数分别表示数位长度;p13的0表示上一位不是1,1表示上一位是1,2表示存在13;mod表示这个数和13的余数。 剩下的就是数位dp的板子了,我太菜了啊。 代码: #include<bits/stdc++.h> #d...

Z7784562的博客 303

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

HDU 3652 - B-number 数位dp入门

题目链接:HDU 3652 - B-number 题目 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, 1...

weixin_44273380的博客 303

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HDU3652 B-number【数位DP+记忆化搜索】

B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8659    Accepted Submission(s): 5146   Problem Description A wqb-number, or B-numbe...

海岛Blog 816

HDU3652 B-number数位DP+秦九韶算法大数取模

题目链接 HDU3652 问一个区间内的B-number的数量,B-number的定义是:数位中含有13,另外能被13整数。例如13,130就是B-number。 数位中含有13是数位DP板子,取模使用秦九韶算法。 AC代码: #include <bits/stdc++.h> using namespace std; #define ll long long ll a[20]; ll dp[11][2][2][13][2]; ll dfs(ll pos, ll limit, ll sta,

陈颜的博客 3493

HDU3652 B-number 数位DP

HDU3652 B-number 数位DP

qq_44919369的博客 182

【数位DP】B-number HDU - 3652

Think: 1知识点:数位DP 2题意:输入r,判断[1, r]区间内有多少个“wqb-number”,“wqb-number”的定义为数位内含有13且可以被13整除,例如13,2613是“wqb-number”,而143和131不是“wqb-number”,143中1和3不是连续存在,131不能被13整除。 3反思: (1):dp数组的控制条件应与dfs中控制变量相对应 (2):dp[

BlessingXRY的博客 540

HDU3652 B-number数位DP

B−numberB-numberB−number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9715 Accepted Submission(s): 5821 Problem Description8 A wqb-nu...

qq_43710979的博客 174

【数位DP】 hdu3652 B-number

B-number 题目:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意:问1~n中包含"13"序列且能被13整除的数有多少个。 题解:详情见代码注释。 代码: #include #include using namespace std; int dp[15][15][3]; /* dp[i][j][k] j表示余数 k==0 不包含

Ted's 游乐园 4029

HDU3652 B-number —— 数位DP

题目链接:https://vjudge.net/problem/HDU-3652 B-number Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7415Accepted Submission(s): 4346...

alince20008的博客 175

HDU 3652 B-number【数位DP】

B-number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8313 Accepted Submission(s): 4931 Problem Description A wqb-number, or B-number...

Irish_Moonshine的博客 227

HDU3652 B-number 数位DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意:统计区间[1,n](n 分析:数位DP,详解见代码。 实现代码如下: #include #include using namespace std; int dp[15][15][3]; //dp[pos][mod][v]:pos纪录位数,mod纪录余

AC_Gibson的专栏 649

数位DP——HDU 3652 B-number

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意: 给定一个整数n,求取闭区间1--n中B-number数的个数。(1 B-number指的是该数可以被13整除,并且该数字中包含连续的13。 解题思路: 很经典的数位DP。 定义2个数组: dp1[i][j][k]:共i位数,最高位是j,模13等

sanmingzi3344的专栏 880
上一篇: FatMouse and Cheese hdu-1078
下一篇: ecnu Problem #3233 N! //qduoj 阶乘问题
jerans
博客等级 码龄10年 54粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值