HDU 3709 Balanced Number

智能音箱开发者必看:CEVA-BX vs Cadence HiFi音频DSP实战选型指南(附功耗对比表) 本文深入对比了CEVA-BX和Cadence HiFi两大音频DSP架构在智能音箱开发中的性能差异,涵盖语音唤醒、多麦克风阵列处理等核心场景。通过实测数据和功耗对比表,为开发者提供选型参考,帮助优化产品性能和能效表现。 阅读详情

传送门

数位dp。(这题比较牛批)

给你一个数,如果能选取这个数的某个数位作为支点(pivot),使得支点左右两边的各个数位的加权和相等(不包括支点)(权值为该数位到支点的距离),那么就称这个数为平衡数。然后问你[x,y]中有几个平衡数。
举个例子,4139是平衡数(以3为支点),20是平衡数(以2为支点)。。。

以下几点:

  1. 将题目条件转化为一个在各个数位上连续计算的公式。就像HDU 4734那样。
    ∑ i = 0 p o s − 1 a i ( i − p i v o t ) = 0 \sum_{i=0}^{pos-1}a_i(i-pivot)=0 i=0∑pos−1​ai​(i−pivot)=0
    pivot表示支点所在的数位下标。
  2. 如上所示,这是一个巧妙的转换。在最后判断该式是否为0就可以了。
    可以看出,在高于pivot的数位上,得到的权值为正,反之则为负。
    所以在从最高位到最低位的dfs过程中,公式的值一定是(非严格)先递增再递减,最后若为0则说明支点左右两部分抵消,等价于题目要求(对一个判断问题的转化,需要双向证明)。
  3. 问题来了,pivot的位置怎么确定?
    答案:在solve()里枚举。
    在solve(x)里,x的每个数位都可能作为pivot,所以每个数位都来一遍dfs。
  4. 所以,pivot相当于这个公式的一个参数,这题只不过需要枚举这个参数的值,这个参数确定了,这题和别的题也就没区别了。所以这题计算量大概是别的题的pos倍。
  5. 不同的参数之间互不干扰,换了一个参数,可以理解为完全换了一个公式。
  6. 在一个dfs下这个参数是不会变的,将这个参数作为dp的第三维,意思就是开了多个二维的dp,以应对枚举的多个dfs。
  7. 还有一个重要问题。
    solve(x)需要求的是[0,x]内有多少平衡数,而我们现在求的是多个结果:
    [0,x]内以第0位为支点的平衡数的数量、[0,x]内以第1位为支点的平衡数的数量、[0,x]内以第2位为支点的平衡数的数量…[0,x]内以第pos-1位为支点的平衡数的数量。
    怎么把后者转化为前者?直接相加会不会有重叠?
  8. 答案:有重叠,且仅有数字0被重复计算。(而且每一次枚举都会被计算)

对第8条的证明:

  1. 对于任意不为0的自然数x,若x为平衡数,则x有且只有一个pivot。
    为什么?
    将x分为三种情况:
    (1)1~9
    (2)形如 s0000…(s!=0)(后接0的个数 >=1)
    (3)其他
    可以看出,对于第一种和第二种,pivot都是唯一的。
    对于第三种,pivot一定不是最高位或最低位,现在试图找第二个pivot:可以想象一个天平,若试图往左或往右移动pivot,则一定会导致天平左右失衡。
  2. 对于任意不为0的自然数x,考虑前导0的情况
    (1)若x是平衡数,则即使有前导0,也不会改变x的pivot,也不会改变x的pivot的个数。
    (2)若x不是平衡数,则即使有前导0,也不会使x成为平衡数。

这题还有几个需要注意的点,在代码注释中说明。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

typedef __int64 ll;

int T;
ll X, Y;
ll dp[19][1378][19];        // dp的数据类型也必须是ll。最大状态是18个9、最低位为支点
int num[19];

ll dfs(int pos, int status, int pivot, bool limit)   // 不能在这里枚举pivot的
{
	if (pos == -1) return (status == 0 ? 1 : 0);
	if ((!limit) && (dp[pos][status][pivot] != -1)) return dp[pos][status][pivot];

	ll cnt = 0;
	int up = (limit ? num[pos] : 9);
	for (int i = 0; i <= up; i++)
	{
		int new_status = status + (pos - pivot)*i;
		if (new_status < 0) continue;                // 不仅仅是剪枝,也是必须!因为防止引用负数下标
		cnt += dfs(pos - 1, new_status, pivot, limit && (i == up));
	}
	if (!limit) dp[pos][status][pivot] = cnt;
	return cnt;
}

ll solve(ll x)
{
	if (x < 0) return 0;                     // 题目中输入可能会是-1

	int pos = 0;
	for (; x;)
	{
		num[pos++] = x % 10;
		x /= 10;
	}

	ll cnt = 0;
	for (int i = 0; i <= pos - 1; i++)
		cnt += dfs(pos - 1, 0, i, true);
	return cnt - pos + 1;                    // 
}

int main()
{
	scanf("%d", &T);
	memset(dp, -1, sizeof dp);
	for (; T--;)
	{
		scanf("%I64d%I64d", &X, &Y);
		printf("%I64d\n", solve(Y) - solve(X - 1));
	}

	return 0;
}
别再用第三方黑盒库了!从零手写C#+YOLOv12推理全流程,框位准、可定制、调试快10倍 从零手写YOLO推理框架,不是为了造轮子,而是为了完全掌控代码,工业现场的需求千变万化,第三方黑盒库根本没法满足所有需求。这套代码我已经在东莞长安的3家PCB厂、深圳南山的2家3C电子厂落地了,稳定运行6个月,没有出过任何问题。如果有什么问题或者需要扩展的功能,都可以在评论区交流。 阅读详情

相关推荐

Label Studio 图像分割自动标注接入教程:从模型预测到一键上传 Predictions

这篇文章详细介绍了如何使用Label Studio进行图像分割任务的自动标注流程。主要内容包括: 环境准备:安装Label Studio和模型推理依赖 项目配置:启动Label Studio服务,创建项目并配置BrushLabels标注界面 数据准备:导入待标注图片,获取API访问凭证 模型推理:运行训练好的分割模型生成预测mask 结果上传:将预测结果转换为Label Studio格式并通过API上传为Predictions 文章提供了完整的操作指南,包括: 详细的命令行参数说明 推荐的项目目录结构 标注

. 451

hdu 3709 Balanced Number

个人练习记录

m0_73500785的博客 957

WinDbg调试工具安装全攻略:从下载到配置的保姆级教程(Windows 10/11适用)

本文提供了一份详细的WinDbg调试工具安装与配置指南,适用于Windows 10/11用户。文章对比了WinDbg Preview独立版与SDK内置经典版的区别,并手把手指导从Microsoft Store或Windows SDK完成安装。核心部分重点讲解了如何配置符号文件路径与源代码路径,这是让WinDbg发挥强大调试功能的关键步骤,并针对常见安装问题提供了实用的排错方法。

hp777的博客 385

Balanced Number HDU - 3709

http://acm.hdu.edu.cn/showproblem.php?pid=3709 dp[i][j]代表[i+1,pos-1]的权值和为j时 [0,i]能提供多少解 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef l...

sunyutian1998的博客 143

深入探究ASP.NET Core读取Request.Body的正确方式

前言# 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路的内容,来自于在开发过程中我遇到的关于Request.Body的读取问题。在之前的使用的时候,基本上都是借助搜索引擎搜索的答案,并没有太关注这个,发现自己理解的和正确的使用之间存在很大的误区。故有感而发,便写下此文,以作记录。学无止境

萌兔兔MMQ!! 777

构建一个基于Simulink的LC滤波器仿真模型

需求分析LC滤波器(Inductor-Capacitor Filter)是一种常见的无源滤波器,广泛应用于电力电子、通信、音频处理等领域。其主要作用是平滑输入信号中的高频谐波成分,保留低频或直流成分,从而提高输出信号的质量。在电力电子系统中,LC滤波器常用于逆变器、整流器等设备的输出端,以减少开关噪声和电磁干扰(EMI),确保输出电压和电流的稳定性。本项目将基于Simulink平台,开发一个完整的LC滤波器仿真模型,涵盖从电源输入到滤波输出的整个过程,并通过PI控制器实现对滤波效果的闭环控制。

MHD0815的博客 740

hdu3709 Balanced Number 数位dp

hdu3709 Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is placed at some digit. More specifically, imagine each digit as a box with weight indicated b...

__surtr的博客 198

2023年高教社杯全国大学生数学建模竞赛 E 题:《黄河水沙监测数据分析》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 903

HDU-3709 Balanced Number

Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Problem Description A balanced number is a non-negative integer that can be balanced if a pi

JSure的代码库 850

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

Robot_PLC_HMI_Automation 6514

一分钟了解 “提示词工程”、“上下文工程”、“驾驭工程”

在大模型刚刚进入大众视野的初期,开发者面临的最大挑战是如何让模型听懂人类的指令。这一阶段被称为提示词工程时代。其核心思想非常直观:通过精心设计输入的文本提示,引导模型输出符合预期的结果。这一时期的开发者更像是“提示词巫师”,他们热衷于寻找所谓的“魔法咒语”。典型的技巧包括角色设定、思维链、少样本学习以及输出格式约束。例如,仅仅在问题前加上一句“请一步步思考”,模型的推理能力往往就能得到显著提升。然而,随着应用场景的复杂化,提示词工程的局限性逐渐暴露。

h a 6 6 6 c k 为 你解决复杂难题! 568

【HDU3709】 Balanced Number

一开始想到的是f[len][pivot][j][k]记录到len,支点为pivot,左边j,右边k的值 看过题解后发现可以直接记录j-k为power_matrix,这样可以少一维,还可以在为负数时剪枝。

Lhq 280

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

653

hdu-3709 Balanced Number

Balanced Number Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65535/65535 K (Java/Others) Problem Description A balanced number is a non-negative integer that can be balanced if a...

aln1541的博客 189

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HDU3709 Balanced Number

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意:   定义一个数字上的某一个数位作为中枢,其他数位上的数乘上该数位到中枢的距离称为该数位上的权值。   问在 \([x,y]\) 中满足下述条件的数有多少个:   即能够在数字上任取一个数位作为中枢,使得中枢左右所有数位的权值和相等。 知识点:  数位DP 解题思...

dielie6462的博客 185

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hdu 3709 balanced number【数位dp】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题目大意:找出 [L , R]区间内是balanced number 的个数; balacced numbe定义:数字中有个平衡点,使两边的数字乘距离平衡点的距离的和相等,例如 4139,把3看作平衡点 左边4*2+1*1 = 右边 9*1; 思路:枚举每一个平衡点,进行数位dp,得出的an...

几许情愁的博客 226

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HDU - 3709 Balanced Number 数位dp

题目链接:https://vjudge.net/problem/HDU-3709 题意:有多少平衡数,例如:4139 is a balanced number with pivot fixed at 3. The torqueses are 4*2 + 1*1 = 9 and 9*1 = 9, 题解:所以每个数的平衡位置只能有一个 dp[ i ][ j ][ k ][ z ] 表示 平衡位置...

还我笑颜 183

Hdu 3709 Balanced Number

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 记忆化 ,用的数位dp的模式感觉 ,数位dp也是菜开始学的 感觉很难看了一些博客 最终艰难的把它a了,写个题解来巩固一下把尽量写得详细点。 网上很多博客都说直接枚举支点 其实对这个不是很熟,下面就用我的话来表述一下这个题吧。 首先是暴力dfs,对于指定长度的一个数,小于它的数有多少是平横数

touwangyi的博客 258

HDU-3709 Balanced Number

数位dp 枚举中间点

a free man 632

HDU3709 Balanced Number[数位DP]

C - Balanced Number  HDU - 3709  题意: 给T组数据,每组数据给出一个x和y,求出[x,y]当中满足以其中一位为平衡点,满足在平衡点的左右两边的力矩大小一致。 题解: 这道题要注意前导零的问题,因为不记录前导零,如果左界也不是0,会多出len-1种情况(len是这个数共有多少位),那么如果左界是0

ControlBear的博客 543

HDU - 3709 Balanced Number

Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 9808 Accepted Submission(s): 4662 Problem Description A balanced number is ...

青烟绕指柔的博客 423
上一篇: HDU 3652 B-number
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值