思路:

之前想直接开左右两边的数结果爆内存...

枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸

注意一下一些细节:dp开long long,注意前导零只能算一次

代码:

#include<iostream>
#include<algorithm>
#define ll long long
const int N = 50000+5;
const int INF = 0x3f3f3f3f;
using namespace std;
int dig[20];
ll dp[20][20][2000];
ll dfs(int pos,int piv,int sum,bool limit){if(pos == -1) return sum == 0? 1 : 0;if(sum < 0) return 0;if(!limit && dp[pos][piv][sum] != -1) return dp[pos][piv][sum];int top = limit? dig[pos] : 9;ll ret = 0;for(int i = 0;i <= top;i++){int tot;if(pos > piv){tot = sum + (pos - piv)*i;}else if(pos < piv){tot = sum - (piv - pos)*i;}else{tot = sum;}ret += dfs(pos - 1,piv,tot,limit && i == top);}if(!limit) dp[pos][piv][sum] = ret;return ret;
}
ll solve(ll x){int pos = 0;if(x == -1) return 0;while(x){dig[pos++] = x % 10;x /= 10;}ll ret = 0;for(int i = 0;i < pos;i++){ret += dfs(pos - 1,i,0,true);}return ret - pos + 1; //前导零只能算一次
}
int main(){int T;ll l,r;scanf("%d",&T);while(T--){memset(dp,-1,sizeof(dp));scanf("%lld%lld",&l,&r);printf("%lld\n",solve(r) - solve(l - 1));}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/9408772.html

HDU 3709 Balanced Number(数位DP)题解相关推荐

  1. HDU 3709 Balanced Number (数位DP)

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

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

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

  3. HDU 3709 Balanced Number

    Balanced Number 题意: 平衡数:存在该数中以一个数字为支点(pivot),点的"力矩"为该点到支点的距离乘以该点的值,而平衡指的是支点两侧的力矩和相等 思路: 易知 ...

  4. HDU - 3709 (Balanced Number)

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

  5. HDU 5787 wolf Number 数位dp

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

  6. HDU odd-even number 数位dp

    题意 在l到r区间内求有多少个符合条件"当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数"的个数 分析 典型的数位dp问题 我们设置dp数组时可以根据 dp[pos][p ...

  7. HDOJ 3709 Balanced Number

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

  8. Hdu 2089-不要62 数位dp

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

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

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

最新文章

  1. 欧洲两个研究团队开发出了让截肢者能感觉到并准确抓住物体的仿生手
  2. python的.arsort()函数的用法
  3. 51nod 1600 Simplr KMP(后缀自动机+维护树上的数据结构)
  4. 大剑无锋之JVM 堆内存溢出后,其他线程是否可继续工作?
  5. 2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)
  6. Java基础---数据类型转换和运算符
  7. cms运行php,迅睿CMS 主程序运行之后
  8. Ubuntu设置中文
  9. 人体姿态估计的基本概念
  10. app账号退不出去_2021个人所得税退税时间是什么时候?还可以退吗?
  11. DPDK 20.11 meson build
  12. 阿里云历时13年,站上世界现代计算架构之巅
  13. Android对未签名的apk进行签名
  14. win7怎么进入安全模式_win7安全模式怎么进
  15. 毕设帮(5188.help)开发日志2——我的构想有市场吗?
  16. 2021最火爆带字微信朋友圈背景
  17. 云智慧陆兴海:统一运维体系为数字政府建设保驾护航
  18. android平板能玩吃鸡吗,吃鸡不卡的安卓平板
  19. YOLO—神经网络原理
  20. Android安卓-泛微OA Emobile7自动打卡

热门文章

  1. Maven学习(六)————企业Maven项目最佳实践
  2. JavaCard概述
  3. sid图像数据_实战材料信息学:使用skimage处理扫描电子显微镜(SEM)图像数据
  4. python3 collections模块 tree_第30天: Python collections 模块
  5. stm32 SysTick
  6. python程序代码_python基础二
  7. android+录像中截图软件下载,录屏截图大师app
  8. getwayworker timer_Java定时器之Timer学习二
  9. mysql登陆三小时平均值图片_Mysql每小时平均值,间隔从半小时开始
  10. 2017年网络统考计算机成绩,2017年12月江苏省成人计算机基础统考成绩查询