HDU 3709 Balanced Number (数位DP)
Balanced Number
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 3798 Accepted Submission(s): 1772
to calculate the number of balanced numbers in a given range [x, y].
0 9
7604 24324
897
题意:找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数
思路:首先这是一个数位DP题,解此题用枚举的算法,枚举出所有可能的状况进行dfs,最后相加,就是结果了。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; int bit[];
__int64 dp[][][]; __int64 dfs(int pos,int o,int l,int limit)
{
//根据题意,要改符合答案的条件,所以当l==0时返回1
if (pos==-)
return l==;
//注意这里,l<0一定要写,因为有一种情况是在pivot的左边<0之后又在左边==0了,这种情况是不符合的,所以这一步不能少
if (l<)
return ;
__int64 &aa=dp[pos][o][l];
if (!limit&&aa!=-)
return aa;
__int64 ans=;
int end=limit?bit[pos]:;
for (int i=;i<=end;i++)
{
int next=l;
next+=(pos-o)*i;
ans+=dfs(pos-,o,next,limit&&i==end);
}
if (!limit)
aa=ans;
return ans;
} __int64 sol(__int64 n)
{
int len=;
while(n)
{
bit[len++]=n%;
n/=;
}
__int64 ans=;
for (int i=;i<len;i++)
{
ans+=dfs(len-,i,,);
}
return ans-(len-);
} int main()
{
int o;
cin>>o;
while(o--)
{
memset(dp,-,sizeof(dp));
__int64 x,y;
cin>>x>>y;
cout<<sol(y)-sol(x-)<<endl;
}
return ;
}
HDU 3709 Balanced Number (数位DP)的更多相关文章
- hdu 3709 Balanced Number(平衡数)--数位dp
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 3709 Balanced Number(数位DP)题解
思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 ...
- HDU 3709 Balanced Number 求区间内的满足是否平衡的数量 (数位dp)
平衡数的定义是指,以某位作为支点,此位的左面(数字 * 距离)之和 与右边相等,距离是指某位到支点的距离; 题意:求区间内满足平衡数的数量 : 分析:很好这又是常见的数位dp , 不过不同的是我们这次 ...
- HDU - 3709 - Balanced Number(数位DP)
链接: https://vjudge.net/problem/HDU-3709 题意: A balanced number is a non-negative integer that can be ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- HDU 5787 K-wolf Number 数位DP
K-wolf Number Problem Description Alice thinks an integer x is a K-wolf number, if every K adjacen ...
- hdu3709 Balanced Number (数位dp+bfs)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- HDU3709:Balanced Number(数位DP+记忆化DFS)
Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is p ...
- HDU 5179 beautiful number 数位dp
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
随机推荐
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法
增加IsHandleCreated 判断 if (this.IsHandleCreated) { this.Invoke(new EventHandler(delegate { ...... })); ...
- (转) TensorFlow深度学习,一篇文章就够了
TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6 原文出处: 我爱计算机 (@tobe迪豪 ) 作者: 陈迪 ...
- Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)
Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介) 部分翻译自“Monte Carlo Tree Search and Its Applicati ...
- java Pattern
public class Test{ //匹配替换掉order by之后的字符串 public static void main(String[] args) { Pattern pattern = ...
- java 动态代码生成。
http://stackoverflow.com/questions/2320404/creating-classes-dynamically-with-java https://zeroturnar ...
- Linux体系结构(二): Linux系统层次
前一节内容大概介绍了一下Linux的历史由来,各大Linux发行厂商都是基于GNU项目下的所有开源软件,来构建各自己的Linux发行版本,一个完整的Linux发行版本大概可以分为以下四个层次结构: ...
- 怎么解决ABBYY找不到_FRBatch.pac的问题
ABBYY Screenshot Reader是ABBYY FineReader 12OCR文字识别软件中自带的一个插件,通常情况下与ABBYY FineReader 12一起安装到计算机中,它是一款 ...
- OpenJudge计算概论-细菌的战争
/*====================================================================== 细菌的战争 总时间限制: 1000ms 内存限制: 6 ...
- ECS 安装redis 及安装PHPredis的扩展
安装redis 1.一条命令就行了:apt-get install redis-server 2.wget http://download.redis.io/releases/redis-3.0.7. ...
- lambda 的使用汇总
d=lambda x:x+1print(d(10))lambda 相当于一个轻量函数返回 d=lambda x:x+1 if x>0 else "error"print(d( ...