真是跪了,一看范围就不会往枚举的方向想,没想到真用枚举加剪枝了。。。-》——-》

解释一下代码中的上限:

例如4567,当枚举最高位时,很明显不能超过4,所以有上限,但当最高位为3以下时,低位就是没有上限的,可以从0~9枚举。当之前的和<0,则后面的会更少,所以可以剪枝。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL __int64
using namespace std; LL dp[20][20][2000];
LL a[25]; LL dfs(int len,int pos,LL pre,bool flag){
if(len==0){
return pre==0?1:0;
}
if(pre<0) return 0;
if(!flag&&dp[len][pos][pre]!=-1)
return dp[len][pos][pre];
int up=flag?a[len]:9;
LL res=0;
for(int i=0;i<=up;i++){
LL tmp=pre;
tmp+=(len-pos)*i;
res+=dfs(len-1,pos,tmp,flag&&i==up);
}
if(!flag)
dp[len][pos][pre]=res;
return res;
} LL slove(LL x){
LL t=x;
int len=0;
while(t){
a[++len]=t%10;
t/=10;
}
LL ans=0;
for(int i=len;i;i--){
ans+=dfs(len,i,0,true);
}
return ans-len+1;
} int main(){
int T; LL l,r;
memset(dp,-1,sizeof(dp));
scanf("%d",&T);
while(T--){
scanf("%I64d%I64d",&l,&r);
printf("%I64d\n",slove(r)-slove(l-1));
}
return 0;
}

  

HDU 3709的更多相关文章

  1. 【HDU 3709】 Balanced Number (数位DP)

    Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...

  2. hdu 3709 数字dp(小思)

    http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...

  3. hdu 3709 Balanced Number(数位dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709 题意:给定区间[a,b],求区间内平衡数的个数.所谓平衡数即有一位做平衡点,左右两边数字的力矩相 ...

  4. hdu 3709 数位dp

    数位dp,有了进一步的了解,模板也可以优化一下了 题意:找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数例如4139,以3为支点4*2 ...

  5. HDU 3709 Balanced Number

    发现只要Σa[i]*i%Σa[i]==0就可以. #include<iostream> #include<cstdio> #include<cstring> #in ...

  6. HDU 3709 Balanced Number (数位DP)

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

  7. Balanced Number HDU - 3709

    题目大意:若一个数以某个位置为支点,支点左右的加权和相同,这样的数被称为平衡数,求区间内平衡数的个数 思路:枚举支点位置,针对每个支点进行数位DP,但是0比较特殊,假设该数的长度为len,枚举len次 ...

  8. Balanced Number HDU - 3709 数位dp

    题意: 给出范围 算出 满足  选取一个数中任一一个 树作为支点  两边的数分别乘以到中心的距离和 左和等于右和   的数有多少个 数位DP题 状态转移方程为dp[pos][x][state]=dp[ ...

  9. C - Balanced Number HDU - 3709 (数位dp)

    题目链接:https://cn.vjudge.net/contest/278036#problem/C 题目大意:手首先是T组数据,然后每一次输入两个数l,r,求这个区间里面满足以某个数字为中心的两侧 ...

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

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

随机推荐

  1. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash

    一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...

  2. 使用串口终端安装AIX操作系统

    使用串口终端安装AIX操作系统 一.配置超级终端 首先,配置超级终端:在笔记本电脑上(Windows XP系统),点击开始à程序->附件->通讯->超级终端,配置名称为test的超级 ...

  3. HTTP请求与请求头

    HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典型的请求消息头域,如下所示: POST/GET http://download.microtool.de:80/somedat ...

  4. mvc中Html.AntiForgeryToken的作用和用法

    参考:http://blog.csdn.net/cpytiger/article/details/8781457

  5. 在线word论文生成的方法

    下午实验室师妹问我latex转word生成的格式不行咋办.于是找了一下网上,发现了一个可以自动生成word论文的网站 https://typeset.io/formats/bmc/default-te ...

  6. hdu 2444 The Accomodation of Students 判断是否构成二分图 + 最大匹配

    此题就是求最大匹配.不过需要判断是否构成二分图.判断的方法是人选一点标记为红色(0),与它相邻的点标记为黑色(1),产生矛盾就无法构成二分图.声明一个vis[],初始化为-1.通过深搜,相邻的点不满足 ...

  7. mysqldump+mydumper+xtrabackup备份原理流程

    mysqldump备份原理 备份的基本流程如下: 1.调用FTWRL(flush tables with read lock),全局禁止读写 2.开启快照读,获取此时的快照(仅对innodb表起作用) ...

  8. Win10 UWP Tile Generator

    图标生成器 https://marketplace.visualstudio.com/items?itemName=shenchauhan.UWPTileGenerator 备份地址: http:// ...

  9. ML:流形学习

    很多原理性的东西需要有基础性的理解,还是篇幅过少,所以讲解的不是特别的清晰. 原文链接:http://blog.sciencenet.cn/blog-722391-583413.html 流形(man ...

  10. 关于XML学习

    XML为知识构架存储语言: http://www.w3school.com.cn/xml/xml_tree.asp 语义网:为计算机构建一个系统的概念网络模型是计算机理解概念和机间信息交流的途径:XM ...