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相关推荐

  1. HDU 3709 Balanced Number (数位DP)

    题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...

  2. HDU - 3709 (Balanced Number)

    题意:设一个数的十进制表达是 a1a2a3...an ,则它是 Balanced Number 的定义是:存在一个位置 i <=n,使得:  问区间[l,r] 内有多少个数是 Balanced ...

  3. HDU - 3709 Balanced Number(数位dp)

    题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...

  4. HDU 3709 Balanced Number(数位DP)题解

    思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 ...

  5. HDOJ 3709 Balanced Number

    数位DP... Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java ...

  6. HDU 3826 Squarefree number:题目解答源码

    2019独角兽企业重金招聘Python工程师标准>>> HDU 3826 Squarefree number:题目解答源码 In mathematics,a squarefree n ...

  7. (HDU - 3709)Balanced Number(数位DP)

    题目链接:Problem - 3709 题意:给定区间[a,b],求区间内平衡数的个数.所谓平衡数即有一位做平衡点,左右两边数字的力矩相等. 分析,这道题我们直接对平衡点进行枚举即可,然后分别求出来每 ...

  8. 【HDU】1005 Number Sequence (有点可爱)

    http://acm.hdu.edu.cn/showproblem.php?pid=1005 A number sequence is defined as follows: f(1) = 1, f( ...

  9. HDU 5972 Regular Number

    Regular Number http://acm.hdu.edu.cn/showproblem.php?pid=5972 题意: 给定一个字符串,求多少子串满足,子串的第i位,只能是给定的数(小于等 ...

最新文章

  1. 小程序之获取用户信息取消授权处理
  2. python之functools partial
  3. Exception in thread AWT-EventQueue-0 java.lang.IllegalThreadStateException
  4. 币安被赶走,交易所寒冬将至?
  5. boost::function_types::is_member_object_pointer的用法测试程序
  6. 20165214 预备作业3 Linux安装及学习
  7. x265 create方法
  8. linux守护进程fifo,linux守护进程配置文件
  9. 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
  10. python文本筛选html_python 正则表达式过滤文本中的html标签 源代码解析
  11. Linux服务器开发初步
  12. 从maya中 导入物体 到Uniyt3D 规范 整理
  13. 第三十 访问财富进退自如 —Spring交易管理
  14. Asp.net实用技巧
  15. 【VirtualBox虚拟机总是提示“0x00000000指令引用的0x00000000内存,该内存不能为written“错误的解决方法】
  16. mac共享文件android,Mac访问局域网共享文件方法
  17. 前端 关于汇率的计算
  18. java学习day58(乐友商城)乐友商城项目搭建、SE6语法使用
  19. 一个大一的迷茫小菜鸟
  20. 软件缺陷报告模板(微信缺陷报告案例)

热门文章

  1. python爬虫正则表达式实例-python爬虫 正则表达式解析
  2. python制作excel表格-excel表格中怎么制作一份燃尽图表
  3. python绘制动态模拟图-Python实现模拟时钟代码推荐
  4. 有道精品课python-115批量转存与提取sha1工具2020下载
  5. python怎么安装requests库-Python爬虫入门requests库的安装与使用
  6. python之父去面试-面试题_个人文章 - SegmentFault 思否
  7. python话雷达图-Python简单雷达图绘制
  8. python3.7下载安装教程-CentOS 7 下 安装 Python3.7
  9. python循环语句-Python for循环控制语句一般格式及方法
  10. 用python画简单的动物-使用Python的turtle画小绵羊