题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709
题目大意:选取某一个数字作为支点,各个数字到该数字的距离为力矩,使得杠杆平衡。如3218这个数,以1为支点时,3距离为2,2距离为1,左边之和为8,后边之和也为8,为平衡数,求在[x,y]范围内平衡数的数量。

只要枚举每个支点的位置,其他的是个裸数位dp,感觉自己又理解了一点,哈哈哈

另外,这个题是做到的第一个前导0有影响的题
如果数为0,是可以的(既符合题意,又确实存在这个数)
如果数为00,是不可以的(符合题意,是平衡数,但是这个数跟0不是一个吗)
所以这个数有几位,数位最大是len,就会多统计了len-1个,在计算的时候要除掉
AC代码:

import java.util.Scanner;public class Main {static int a[]=new int[20];static long dp[][][]=new long[20][20][2050];static long solve(long x){int pos=0;long ans=0;while(x!=0){a[++pos]=(int) (x%10);x/=10;}for(int i=1;i<=pos;i++){ans+=dfs(pos,i,0,true);}return ans-pos+1;}//pos为当前枚举的数位,x为平衡点的位置,st为左边点到平和点的力矩和,limit代表是否枚举到了上限static long dfs(int pos,int x,int st,boolean limit){if(pos==0)return st==0?1:0;if(st<0)return 0;if(!limit&&dp[pos][x][st]!=-1)return dp[pos][x][st];int num=(limit?a[pos]:9);long ans=0;for(int i=0;i<=num;i++){int tmp=st+i*(pos-x);ans+=dfs(pos-1,x,tmp,limit&&i==a[pos]);//保存左边点到平和点的力矩和为tmp的状态数量}if(!limit)dp[pos][x][st]=ans;return ans;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);for(int i=0;i<dp.length;i++){for(int j=0;j<dp[i].length;j++){for(int k=0;k<dp[i][j].length;k++){dp[i][j][k]=-1;}}}int t=sc.nextInt();while(t-->0){long x=sc.nextLong();long y=sc.nextLong();System.out.println(solve(y)-solve(x-1));}sc.close();}
}

HDU 3709 平衡数 数位dp(Java版)相关推荐

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

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

  2. HDU 3709 Balanced Number (数位DP)

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

  3. 洛谷 P2657 [SCOI2009] windy数 数位DP

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...

  4. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  5. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  6. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  7. HDU 2089 不要62 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...

  8. HDU 5787 wolf Number 数位dp

    题意 题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数 1≤L≤R≤1e18 2≤K≤5 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  9. bzoj 1026: [SCOI2009]windy数 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

  10. 【bzoj1026】[SCOI2009]windy数 数位dp

    题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...

最新文章

  1. .net new一个类为什么报空指针_谈谈.NET对象生命周期
  2. c++中static_cast用法与uchar/char的区别
  3. NHibernate 错误
  4. 13个代码注释的小贴士
  5. webServer tomcat5/tomcat6/tomcat7诠释
  6. yelee博客的busuanzi访客统计失效问题解决
  7. python gps 地图 轨迹_Apollo问答丨执行rtk_recorder.sh start录制循迹轨迹时报错怎么办?...
  8. ANDROID 获得地理位置
  9. 2018_08_10_生活记录_关于我和这个博客的说明
  10. java求等比数列求和_agile java 等比数列求和
  11. 永久关闭WPS热点,防止自启动
  12. ps快捷键 拿走不谢*小Lemon送你们的
  13. #ps –ef_ps命令 – 显示进程状态
  14. 360做专业手机电商平台还是有搞头
  15. Android设计模式(十六)-中介者模式
  16. [单片机]基于STM32的ONENET云平台操控系统
  17. 软件工程——软件危机
  18. 火车头采集实现DeDecms免登陆/自动登陆方法
  19. 笔记本拆c面_拆解C面准备步骤 注意拧下所有螺丝_Alienware 15_笔记本评测-中关村在线...
  20. javaSE编写的小游戏打包成可执行文件

热门文章

  1. excel的图表里如何添加上下标
  2. 笔记本电脑触摸板操作
  3. excel导入,用反射匹配字段名
  4. Django项目详解2——动态响应的web应用
  5. 通过lua脚本识别微信,支付宝,龙支付
  6. [node] 对某网站的简单爬虫
  7. 降压稳压器LM2596SX-ADJ技术参考
  8. PEP 8: E305 excepted 2 blank lines, after class or function definition, found 1
  9. 视频插帧论文阅读(一)——FLAVR
  10. ios 程序中安装 描述文件