HDU 3709 Balanced Number(数位DP)题解
思路:
之前想直接开左右两边的数结果爆内存...
枚举每次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;
}
												
											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
		
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
 - 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 ...
 - HDU 5179 beautiful number 数位dp
		
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5179 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
 - HDU3709 Balanced Number —— 数位DP
		
题目链接:https://vjudge.net/problem/HDU-3709 Balanced Number Time Limit: 10000/5000 MS (Java/Others) ...
 - HDU 5898 odd-even number (数位DP) -2016 ICPC沈阳赛区网络赛
		
题目链接 题意:一个数字,它每个数位上的奇数都形成偶数长度的段,偶数位都形成奇数长度的段他就是好的.问[L , R]的好数个数. 题解:裸的数位dp, 从高到低考虑每个数位, 状态里存下到当前位为止的 ...
 
随机推荐
- chrome中image图片预留位置的问题
			
在项目中发现,当设置 <img src="" width="100" height="100"> 通过设置img的width属性 ...
 - Android UsageStats:应用根据启动次数、启动时间、应用名称排序
			
Android 7.1.1 developers/samples/android/system/AppUsageStatistics/Application/src/main/java/com/exa ...
 - console输出图案
			
探索天猫控制台下的图案是怎么制作的 通过它的源码找到以下代码(还原解压代码) 自己也照葫画瓢搞了个以前公司的logo
 - jhipser微服务架构介绍
			
内容提要 本文涉及以下内容: 微服务架构介绍 spring cloud介绍 jhipster架构介绍 微服务架构介绍 微服务概念 微服务和SOA很相似,都是按照业务功能把系统拆分成一个一个的服务.比如 ...
 - interface  Impl
			
public interface ActionBarOperations { void initSthOne(); void initSthTwo(); } public class ActionBa ...
 - java的Result类
			
import org.apache.commons.lang.StringUtils; import java.io.Serializable;import java.util.HashMap;imp ...
 - iOS - 开发中调试小技巧
			
对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...
 - docker基本操作命令
			
1. 构建镜像 docker build -t centos/tomcat:7.0 2. 创建一个容器 docker run --name test-tomcat centos/tomcat:7.0 ...
 - JS实现数字千位符格式化方法
			
/** * [number_format 参数说明:] * @param {[type]} number [number:要格式化的数字] * @param {[type]} decimals [de ...
 - 云备份厂商Rubrik再获2.61亿美元融资,估值高达33亿美元 转自中国存储网
			
数据管理初创公司Rubrik在Bain Capital Ventures领导的最新一轮融资中筹集了2.61亿美元,估值为33亿美元. 现有的利益相关者 - Lightspeed Venture Par ...