[Hdu3652]B-number(数位DP)
Description
题目大意:求小于n是13的倍数且含有'13'的数的个数。
(1 <= n <= 1000000000)
Solution
数位DP,题目需要包含13,且被13整除,所以状态应该多2个,
\(F[i][j][k]\)表示位数为i,余数为j,包含13状态为k的方案数
其中k(0,1,2),2表示已经包含13,1表示上一个为1,否则为0
记忆化打法
Tips:
- 数组k维要开到3
- DP数组只算一次,只需开始初始化一次
- 计算转移的k时的顺序
Code
#include <cstdio>
#include <cstring>
int n,d[15],f[15][15][3];
int dfs(int p,int mo,int exi,int lim){
	int &tmp=f[p][mo][exi],r=0;
	if(!p) return exi==2&&!mo;
	if(!lim&&tmp!=-1) return tmp;	
	int mx=lim?d[p]:9;
	for(int i=0;i<=mx;++i){
		int t=0;
		if(exi==2) t=2;//必须先判,否则错解
		else if(exi==1&&i==3) t=2;
		else if(i==1) t=1;
		r+=dfs(p-1,(mo*10+i)%13,t,lim&&(i==mx));
	}
	return lim?r:tmp=r;
}
int main(){
	memset(f,-1,sizeof(f));
	while(~scanf("%d",&n)){
		int len=0;
		while(n){
			d[++len]=n%10;
			n/=10;
		}
		printf("%d\n",dfs(len,0,0,1));
	}
	return 0;
}
[Hdu3652]B-number(数位DP)的更多相关文章
- 多校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 用作标记,当现在枚举的数小 ... 
- hdu 5898 odd-even number 数位DP
		传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ... 
- codeforces Hill Number 数位dp
		http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ... 
- 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 ... 
- Fzu2109 Mountain Number 数位dp
		Accept: 189 Submit: 461Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description One ... 
- HDU 3709 Balanced Number (数位DP)
		Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ... 
- beautiful number 数位DP codeforces 55D
		题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ... 
- FZU - 2109 Mountain Number 数位dp
		Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ... 
- BNU 13024 . Fi Binary Number  数位dp/fibonacci数列
		B. Fi Binary Number A Fi-binary number is a number that contains only 0 and 1. It does not conta ... 
- 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 ... 
随机推荐
- Java学习笔记--类和对象
			1.介绍面向对象的编程 面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ... 
- AD Framework 单点登录
			单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 中 ... 
- ORACLE比较两个数据库的表结构
			create table ESPACE_TABLE( TABLE_NAME VARCHAR2(100) not null) create table ESPACE_COLUMN( TABLE_NAME ... 
- 01html基础
			01_html 1 Mac中的快捷键 基础快捷键: command+c 复制 command+v 粘贴 command+m 最小化当前窗口 Shift+command+c 桌面环境打开Finder c ... 
- 如何修改HDFS上文件
			如果只想append操作: . echo "<Text to append>" | hdfs dfs -appendToFile - yourHdfsPath/test ... 
- python 实例方法,类方法,静态方法
			实例方法 class Human(object): def __init__(self, weight): self.weight = weight def get_weight(self): ret ... 
- dac  verilog    ad5601
			首先从官网下载数据手册.DAC有串行有并行,ad5601是串行,(需要好多时钟沿的移位内部转换为并行在输出). 按照手册的时序编写程序, 关注下芯片的波特率范围 看看手册的数据传输那些事有效的数据位 ... 
- solr 近实时搜索
			摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到. Solr不会因为本次提交而阻塞更新操作,不会等待后台合并操作(merg ... 
- Angular6中[ngClass]、[ngStyle]的基本使用
			1.ngStyle 基本用法 <div [ngStyle]="{'background-color':'green'}"></<div> 判断添加 & ... 
- SqlServer触发器的理解
			SqlServer触发器是与表事件相关的特殊存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发.比如当对一个表进行操作( insert,delete, update)时就会激活它执行. ... 
