HDU 3709 Balanced Number
Balanced Number
题意: 平衡数:存在该数中以一个数字为支点(pivot),点的"力矩"为该点到支点的距离乘以该点的值,而平衡指的是支点两侧的力矩和相等
思路:
易知当支点相同时,只要前面的力矩相等,那么就可以建立相同的子结构。那么dp中就要把支点加进去,同时力矩也要加进去,外加位置就是三维。原本分析认为位置可以不加,但是发现少计算了很多。同时看static里面,memory用得最小的也是将近小了20倍,觉得这一维也是可以去掉的。以后想到在贴出来吧!
支点的转化:原本想直接在dfs里面看看能否设置为一个pivot动一个不动,但是没搞出来,之后就直接枚举了...每次数位DP都要看看前置0的影响。这道题每一个支点都会有一个0,所以减去重复的即可。
#include<bits/stdc++.h> using namespace std; #define MS1(a) memset(a,-1,sizeof(a)) #define MS0(a) memset(a,0,sizeof(a)) typedef long long ll; int bit[23]; ll dp[20][1800][20]; ll dfs(int pos,int val,int pivot,bool edge) {if(val < 0) return 0;if(pos == -1) return val == 0;if(!edge && dp[pos][val][pivot] >= 0) return dp[pos][val][pivot];int end = edge ? bit[pos] : 9;ll ans = 0;for(int i = 0;i <= end;i++){ans += dfs(pos - 1,val+i*(pos - pivot),pivot,edge&&(i==end));}if(!edge) dp[pos][val][pivot] = ans;return ans; } ll calc(ll n) {if(n == -1) return 0;int tot = 0;while(n){bit[tot++] = n%10;n /= 10;}ll ans = 0;for(int i = tot - 1;i >= 0;i--)ans += dfs(tot - 1,0,i,true);return ans - tot + 1; } int main() {MS1(dp);int T;scanf("%d",&T);while(T--){ll L,R;scanf("%I64d%I64d",&L,&R);printf("%I64d\n",calc(R) - calc(L-1));} }
View Code
转载于:https://www.cnblogs.com/hxer/p/5177455.html
HDU 3709 Balanced Number相关推荐
- HDU 3709 Balanced Number (数位DP)
题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...
- HDU - 3709 (Balanced Number)
题意:设一个数的十进制表达是 a1a2a3...an ,则它是 Balanced Number 的定义是:存在一个位置 i <=n,使得: 问区间[l,r] 内有多少个数是 Balanced ...
- HDU - 3709 Balanced Number(数位dp)
题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...
- HDU 3709 Balanced Number(数位DP)题解
思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 ...
- HDOJ 3709 Balanced Number
数位DP... Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java ...
- HDU 3826 Squarefree number:题目解答源码
2019独角兽企业重金招聘Python工程师标准>>> HDU 3826 Squarefree number:题目解答源码 In mathematics,a squarefree n ...
- (HDU - 3709)Balanced Number(数位DP)
题目链接:Problem - 3709 题意:给定区间[a,b],求区间内平衡数的个数.所谓平衡数即有一位做平衡点,左右两边数字的力矩相等. 分析,这道题我们直接对平衡点进行枚举即可,然后分别求出来每 ...
- 【HDU】1005 Number Sequence (有点可爱)
http://acm.hdu.edu.cn/showproblem.php?pid=1005 A number sequence is defined as follows: f(1) = 1, f( ...
- HDU 5972 Regular Number
Regular Number http://acm.hdu.edu.cn/showproblem.php?pid=5972 题意: 给定一个字符串,求多少子串满足,子串的第i位,只能是给定的数(小于等 ...
最新文章
- 小程序之获取用户信息取消授权处理
- python之functools partial
- Exception in thread AWT-EventQueue-0 java.lang.IllegalThreadStateException
- 币安被赶走,交易所寒冬将至?
- boost::function_types::is_member_object_pointer的用法测试程序
- 20165214 预备作业3 Linux安装及学习
- x265 create方法
- linux守护进程fifo,linux守护进程配置文件
- 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
- python文本筛选html_python 正则表达式过滤文本中的html标签 源代码解析
- Linux服务器开发初步
- 从maya中 导入物体 到Uniyt3D 规范 整理
- 第三十 访问财富进退自如 —Spring交易管理
- Asp.net实用技巧
- 【VirtualBox虚拟机总是提示“0x00000000指令引用的0x00000000内存,该内存不能为written“错误的解决方法】
- mac共享文件android,Mac访问局域网共享文件方法
- 前端 关于汇率的计算
- java学习day58(乐友商城)乐友商城项目搭建、SE6语法使用
- 一个大一的迷茫小菜鸟
- 软件缺陷报告模板(微信缺陷报告案例)
热门文章
- python爬虫正则表达式实例-python爬虫 正则表达式解析
- python制作excel表格-excel表格中怎么制作一份燃尽图表
- python绘制动态模拟图-Python实现模拟时钟代码推荐
- 有道精品课python-115批量转存与提取sha1工具2020下载
- python怎么安装requests库-Python爬虫入门requests库的安装与使用
- python之父去面试-面试题_个人文章 - SegmentFault 思否
- python话雷达图-Python简单雷达图绘制
- python3.7下载安装教程-CentOS 7 下 安装 Python3.7
- python循环语句-Python for循环控制语句一般格式及方法
- 用python画简单的动物-使用Python的turtle画小绵羊