HDU 3709 平衡数 数位dp(Java版)
题目链接: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版)相关推荐
- HDU - 3709 Balanced Number(数位dp)
题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...
- HDU 3709 Balanced Number (数位DP)
题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...
- 洛谷 P2657 [SCOI2009] windy数 数位DP
大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 P2657 [SCOI2009 ...
- Hdu 2089-不要62 数位dp
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others) Me ...
- HDU 3555 Bomb(数位DP模板啊两种形式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...
- HDU 6156 Palindrome Function 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...
- HDU 2089 不要62 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...
- HDU 5787 wolf Number 数位dp
题意 题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数 1≤L≤R≤1e18 2≤K≤5 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- bzoj 1026: [SCOI2009]windy数 数位DP算法笔记
数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...
- 【bzoj1026】[SCOI2009]windy数 数位dp
题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...
最新文章
- .net new一个类为什么报空指针_谈谈.NET对象生命周期
- c++中static_cast用法与uchar/char的区别
- NHibernate 错误
- 13个代码注释的小贴士
- webServer tomcat5/tomcat6/tomcat7诠释
- yelee博客的busuanzi访客统计失效问题解决
- python gps 地图 轨迹_Apollo问答丨执行rtk_recorder.sh start录制循迹轨迹时报错怎么办?...
- ANDROID 获得地理位置
- 2018_08_10_生活记录_关于我和这个博客的说明
- java求等比数列求和_agile java 等比数列求和
- 永久关闭WPS热点,防止自启动
- ps快捷键 拿走不谢*小Lemon送你们的
- #ps –ef_ps命令 – 显示进程状态
- 360做专业手机电商平台还是有搞头
- Android设计模式(十六)-中介者模式
- [单片机]基于STM32的ONENET云平台操控系统
- 软件工程——软件危机
- 火车头采集实现DeDecms免登陆/自动登陆方法
- 笔记本拆c面_拆解C面准备步骤 注意拧下所有螺丝_Alienware 15_笔记本评测-中关村在线...
- javaSE编写的小游戏打包成可执行文件