数位DP入门笔记(1)HUD-2089

news2024/11/22 17:27:20

题目:

题目理解和思路:

1.此题是给一个6位车牌号,正着不能含有连着的62,不能有4。

2.判断车牌号可能会采用dfs,因为每增加一位数就包含带4,或者形成62两种不合法情况(事实上没有用到)。

3.车牌的特性为,序号为的9车牌事实上相当于009。

解题步骤:

1.建立一个dp数组,对dp数组进行数据维护。第i行第j列表示以数字j开头长度为i的合法车牌数量(毫无疑问dp[x][4]全为0,dp[x][6]相对于其他列也应该会少)

具体维护方式(状态转移方程):dp[i][x]+=dp[i-1][k]        (x==6&&k==2时不加,x==4时直接赋0值。其他情况皆为遍历0-9所有数字然后加和)

维护代码:

void Init() {		/*预处理*/
	for (int j = 0; j < maxsize; j++) {
		dp[1][j] = 1;
	}
	dp[1][4] = 0;
	for (int i = 2; i < maxsize; i++) {
		for (int j = 0; j < maxsize; j++) {
			if (j == 4) {
				dp[i][j] = 0; continue;
			}
			for (int k = 0; k < maxsize; k++) {
				if(!(j==6&&k==2))dp[i][j] += dp[i - 1][k];
			}
		}
	}
}

维护后数组样式:

 2.对输入的数据进行处理

判断某个数到1之间的所有合法车牌:

举例,若求1-384之间的合法车牌。应该包括

        三位数:000-099,100-199,200-299

二位数的默认第一位为3

        两位数:00-09 10-19 20-29 30-39 40-49 50-59 60-69 70-79

一位数的默认前两位为38

        一位数:0-4

因此结果应该为dp[3][0]+dp[3][1]+dp[3][2]+dp[2][0]+..............+dp[2][7]+dp[1][1]+...........+dp[1][4]

计算函数:

int caculate(string s) {
	int m=0;
	for (int i = 0; i < s.length(); i++) {		/*高位到低位*/
		for (int j = 0; j < s[i] - 48; j++) {
			if ((i != 0 && s[i - 1] == '6' && j == 2) || j == 4) {
				continue;
			}
			else {
				m += dp[s.length() - i][j];
			}
		}
		if ((i != 0 && s[i - 1] == '6' && s[i] == '2') || s[i] == '4') {
			m--; break;
		}
	}
	return m;
}

3.此外值得注意的是,因为输入的是两个数据,理论来说应该由384所计算的dp数组和减1计算的dp数组和,但是在计算大的dp数组和时已经包括了1,所以在计算两者的dp和时1应该减1变成0。(和前缀和问题类似)

最终代码:

#include<iostream>
#include<string>
#define maxsize 10
using namespace std;
int dp[maxsize][maxsize] = { 0 };
void Init();
int caculate(string s);
string inttostring(int x1);
int main() {
	Init();
	//print();
	int x1, x2;
	string s1, s2;
	while (true) {
		cin >> x1 >> x2;
		if (x1 == 0 && x2 == 0)break;
		x1--;		/*小的数要减1*/
		s1 = inttostring(x1);
		s2 = inttostring(x2);
		cout << caculate(s2) - caculate(s1)<< endl;
	}
	return 0;
}
string inttostring(int x1) {		/*整数变字符串方便处理*/
	string s;
	int cnt = 0;
	int num[15];
	while (x1) {
		num[cnt] = x1 % 10;
		x1 /= 10;
		cnt++;
	}
	for (int i = cnt - 1; i >= 0; i--) {
		s.push_back(num[i] + 48);
	}
	return s;
}
int caculate(string s) {
	int m=0;
	for (int i = 0; i < s.length(); i++) {		/*高位到低位*/
		for (int j = 0; j < s[i] - 48; j++) {
			if ((i != 0 && s[i - 1] == '6' && j == 2) || j == 4) {
				continue;
			}
			else {
				m += dp[s.length() - i][j];
			}
		}
		if ((i != 0 && s[i - 1] == '6' && s[i] == '2') || s[i] == '4') {
			m--; break;
		}
	}
	return m;
}

void Init() {		/*预处理*/
	for (int j = 0; j < maxsize; j++) {
		dp[1][j] = 1;
	}
	dp[1][4] = 0;
	for (int i = 2; i < maxsize; i++) {
		for (int j = 0; j < maxsize; j++) {
			if (j == 4) {
				dp[i][j] = 0; continue;
			}
			for (int k = 0; k < maxsize; k++) {
				if(!(j==6&&k==2))dp[i][j] += dp[i - 1][k];
			}
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java学习day67(乐友商城)商品详情及静态化

1.商品详情 当用户搜索到商品&#xff0c;肯定会点击查看&#xff0c;就会进入商品详情页&#xff0c;接下来我们完成商品详情页的展示&#xff0c; 1.1.Thymeleaf 在商品详情页中&#xff0c;我们会使用到Thymeleaf来渲染页面&#xff0c;所以需要先了解Thymeleaf的语法。 …

带你深度剖析《数据在内存中的存储》——C语言

文章目录 一、数据类型介绍 二、整型在内存中的存储方式 2、1 原码、反码、补码的讲解 2、2 大小端介绍 2、2、1 大小端的概念 2、2、2 为什么要区分大小端存储呢&#xff1f; 2、2、3 大小端判断练习 三、浮点数在内存中的存储方式 3、1 浮点数在内存中的存储例题 3、2 浮点数…

TensorFlow2.0实战:Cats vs Dogs

数据集准备 在本文中&#xff0c;我们使用“Cats vs Dogs”的数据集。这个数据集包含了23,262张猫和狗的图像 你可能注意到了&#xff0c;这些照片没有归一化&#xff0c;它们的大小是不一样的 但是非常棒的一点是&#xff0c;你可以在Tensorflow Datasets中获取这个数据集 …

梦在远方路在脚下,社科院与杜兰大学金融管理硕士项目与你一路相伴

梦想是指引我们飞翔的翅膀&#xff0c;梦想是远方的灯塔指引着我们前进的方向。梦想距离我们很远&#xff0c;但路在脚下&#xff0c;只要朝着梦想前进&#xff0c;终有一天梦想会照进现实。就像拥有读研梦想的我们&#xff0c;在社科院杜兰金融管理硕士项目汲取能量&#xff0…

【Android OpenGL开发】OpenGL ES与EGL介绍

什么是OpenGL ES OpenGL&#xff08;Open Graphics Library&#xff09;是一个跨编程语言、跨平台的编程图形程序接口&#xff0c;主要用于图像的渲染。 Android提供了简化版的OpenGL接口&#xff0c;即OpenGL ES。 早先定义 OpenGL ES 是 OpenGL 的嵌入式设备版本&#xff…

Mac上超实用的6款软件,老用户都知道!

今天为大家带来的是6款超实用的Mac软件&#xff0c;让你不再走弯路。第一款&#xff1a;Amphetamine 防休眠的利器Amphetamine for mac是应用在Mac上的一款防休眠工具&#xff0c;可以自定义哪些程序运行时不休眠&#xff0c;做到自定义Mac睡眠时间&#xff0c;可以通过超级简单…

【数据结构】链式存储:链表(无头双向链表实现)

目录 &#x1f947;一&#xff1a;无头双向链表 &#x1f392;二、无头双向链表的实现 &#x1f4d8;1.创建节点类 &#x1f4d2;2.创建链表 &#x1f4d7;3.打印链表 &#x1f4d5;4.查找是否包含关键字key是否在单链表当中 &#x1f4d9;5.得到单链表的长度 &#x1…

PCL中常用的高级采样方法

0. 简介 我们在使用PCL时候&#xff0c;常常不满足于常用的降采样方法&#xff0c;这个时候我们就想要借鉴一些比较经典的高级采样方法。这一讲我们将对常用的高级采样方法进行汇总&#xff0c;并进行整理&#xff0c;来方便读者完成使用 1. 基础下采样 1.1 点云随机下采样 …

代码随想录拓展day6 N皇后

代码随想录拓展day6 N皇后 只有这一个内容。一刷的时候也没弄太明白&#xff0c;二刷的时候补上。还有部分内容来自牛客网左老师的算法课程。 总体思路不容易想明白&#xff0c;优化也有很大难度。这要是面试能碰上基本就是故意不给过了吧。 思路 首先来看一下皇后们的约束…

Flink 容错恢复 2.0 2022 最新进展

摘要&#xff1a;本文整理自阿里云 Flink 存储引擎团队负责人&#xff0c;Apache Flink 引擎架构师 & PMC 梅源在 FFA 核心技术专场的分享。主要介绍在 2022 年度&#xff0c;Flink 容错 2.0 这个项目在社区和阿里云产品的进展&#xff0c;内容包括&#xff1a;Flink 容错恢…

基于ssm的个人健康管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

简单理解光会产生折射的原因及折射定律的推导

已知 1、光是一种波&#xff1b; 2、光在不同介质中传播速度不同。 构建模型 如下图所示&#xff0c;光是中电磁波&#xff0c;以余弦波为例&#xff0c;取余弦波的极大值点为参考&#xff0c;建立一个平面波&#xff08;波前为一个平面&#xff09;。能明显的看出光的传播方…

树形结构——二叉树

前言 前面的章节我们介绍了两种重要的数据结构&#xff0c;数组和链表&#xff0c;由于他们各自的特性使得他们的优缺点非常分明&#xff0c;在查询速度和插入速度上顾此失彼&#xff0c;不能兼顾&#xff0c;那么有没有一种数据结构可以同时高效的完成插入和查询操作呢&#x…

专访 | 刘嘉松:开源,互惠且共赢

本文整理自对 2022 开源之夏 OpenMLDB 社区贡献者刘嘉松同学的采访&#xff0c;欢迎大家关注~ OpenMLDB&#xff1a;可以先请你介绍一下你自己吗? 刘嘉松&#xff1a;我叫刘嘉松&#xff0c;是中南大学计科专业的一名本科生&#xff0c;目前大四&#xff0c;未来将继续在中南…

Hello 2023 D. Boris and His Amazing Haircut

原题链接&#xff1a;Problem - D - Codeforces 题意&#xff1a; 给定长度为 n 的数组 A &#xff0c;代表 Boris 现在的头发长度&#xff0c;和一个长度为 n 的数组 B &#xff0c;代表他希望的发型的头发长度。理发师手里有 m 把剪刀&#xff0c;每个都只能用一次&#xff…

计算机硕士论文,盲审的老师都很严吗? - 易智编译EaseEditing

首先&#xff0c;学位论文必须论证严谨 对于一个结果的解读&#xff0c;先老老实实的把得到什么结果讲一遍&#xff0c;基于这个所得出的结论说一说&#xff0c;最后&#xff0c;来个非谓语的短句吹一吹重要性或提示意义。 这其实是有套路的一个句子写下来。但是&#xff0c;在…

AC7811-ACMP模拟比较器

在无感的BLDC方波控制中&#xff0c;AC7811没办法再直接通过PWDT模块检测霍尔信号了。 所以需要先进行ACMP模块的初始化配置&#xff0c;使能ACMP模块正常工作后&#xff0c;ACMP会对输入的三相反电动势与电机中电电压进行轮询模拟&#xff0c;得到各相反电动势过零点&#xf…

分享5款有趣但或许不那么实用的软件

今天我想分享几个有趣但或许不那么实用的软件&#xff0c;各位喜欢的朋友可以自行下载呢。 1.软件音量设置——EarTrumpet 听音乐、看视频、玩游戏&#xff0c;在各应用切换过程中&#xff0c;你可能会频繁调整系统音量大小&#xff0c;以适应自己的耳朵。而 EarTrumpet 则可…

AIGC:BAT、抖快的新掘金口?

配图来自Canva可画 AI辅助绘画估值超十万&#xff1f; 12月28日&#xff0c;山东人民出版社看中一位4岁女孩用百家号AI作画创作的AI绘本《超能外星战队》&#xff0c;认为该画价值超十万元且有出版意向。与此同时&#xff0c;“AI作画”像病毒般在各大短视频平台蔓延&#xf…

年度盘点丨2022年,7大关键词彰显用友成长型企业数智力量

导读&#xff1a;这一年&#xff0c;他们用卓越成绩证明自己&#xff0c;用产品创新回馈客户&#xff0c;用实力开启了中国成长型企业数智化产业的逆袭之路&#xff01; 2022年&#xff0c;企业级数智化产业经历了翻天覆地的变化。 曾经万家追捧的“舶来品”在成长型企业的主…