这道题还是关于数位DP的板子题

数位DP有一个显著的特征,就是求的东西大概率与输入关系不大,理论上一般都是数的构成规律

然后这题就是算一个\( F(A) \)的公式值,然后求\( \left [ 0 ,  B \right ] \)区间内\( F(x) \)不大于\( F(A) \)的数的个数

所以由数据范围很容易得到计算出最大值不会超过4600

然后我们设状态\( dp[10][4600][4600] \)表示不同\( F(A) \)取值下的第\( pos \)个位置的值总和为 \( sumx \)的 数的个数

显然会MLE

这时候可以用减法转换状态

用\( dp[10][4600] \)表示到了第\( pos \)个位置,还要凑\( sumx \)的值的数的个数

然后就可以发现一个现象,这个状态与\( F(A) \)无关的

然后就可做了

注意一个事情,就是求的是不大于\( F(A) \)的数的个数

所以最后\( sumx \ge 0 \)就是合法状态了

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int dp[][],a[];
int dfs(int pos,int limit,int state){
if(state<)
return ;
if(pos==-){
return state>=;
}
if(!limit&&dp[pos][state]!=-)
return dp[pos][state];
int mid=,up=limit?a[pos]:;
for(int i=;i<=up;i++){
if((i<<(pos))<=state)
mid+=dfs(pos-,limit&&i==a[pos],state-(i<<(pos)));
}
if(!limit)
dp[pos][state]=mid;
return mid;
}
int solve(int A,int x){
int fa=,cona=;
while(A){
fa+=((A%)<<(cona));
A/=;
cona++;
}
int con=;
memset(a,,sizeof(a));
while(x){
a[con]=x%;
x/=;
con++;
}
return dfs(con-,true,fa);
}
int main(){
int T;
memset(dp,-,sizeof(dp) );
scanf("%d",&T);
for(int i=;i<=T;i++){
int A,B;
scanf("%d %d",&A,&B);
printf("Case #%d: %d\n",i,solve(A,B));
}
return ;
}

题解——HDU 4734 F(x) (数位DP)的更多相关文章

  1. HDU 4734 F(x) ★(数位DP)

    题意 一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少 ...

  2. HDU 4734 - F(x) - [数位DP][memset优化]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 Time Limit: 1000/500 MS (Java/Others) Memory Lim ...

  3. 【数位DP】 HDU 4734 F(x)

    原题直通车:HDU 4734 F(x) 题意:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1, 求0.....B中F[x]<=F[A ...

  4. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  5. HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    普通的数位DP计算回文串个数 /* HDU 6156 - Palindrome Function [ 数位DP ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 2-36进制下回文串个数 */ ...

  6. HDU 4734 F(x) (2013成都网络赛,数位DP)

    F(x) Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. hdu 4389 X mod f(x) 数位DP

    思路: 每次枚举数字和也就是取模的f(x),这样方便计算. 其他就是基本的数位Dp了. 代码如下: #include<iostream> #include<stdio.h> # ...

  8. HDU 4734 F(x) 2013 ACM/ICPC 成都网络赛

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4734 数位DP. 用dp[i][j][k] 表示第i位用j时f(x)=k的时候的个数,然后需要预处理下小 ...

  9. 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 ...

随机推荐

  1. c++学习笔记(八)- map

    map<key, value>是按key排好序的,key不可以重复. 1. map.lower_bound():按key查找,如果查找的key存在,返回该位置,如果不存在返回大于所查找值的 ...

  2. rabbitmq和redis用作消息队列的区别

    将redis发布订阅模式用做消息队列和rabbitmq的区别: 可靠性redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中:r ...

  3. 在CentOS 6.3中安装与配置cmake

    安装说明安装环境:CentOS-6.3安装方式:源码编译安装软件:cmake-2.8.10.2.tar.gz下载地址:http://www.cmake.org/cmake/resources/soft ...

  4. ubunta apt install error

    ubuntu系统: 用apt-get命令安装一些软件包时,总报错:E:could not get lock /var/lib/dpkg/lock -open等 出现这个问题的原因可能是有另外一个程序正 ...

  5. The Little Prince-12/01

    The Little Prince-12/01 The people have no imagination. They repeat whatever one says to them… On my ...

  6. 2017第十三届湖南省省赛B - Simplified Blackjack CSU - 1998

    在一次聚会上,Bob打算和Alice一起玩Blackjack游戏,但Alice平时很少玩扑克类游戏,Bob觉得跟Alice解释清楚Blackjack的规则有点困难,于是Bob决定和Alice玩一次简化 ...

  7. 获取微信access_token

    /** * 获取微信access_token * @return mixed */function get_access_token() { $appId = C('APPID'); $secret ...

  8. GitHub使用笔记1:git客户端配置多ssh key

    公司用gitlab 外网的github同时配置 这样就导致我们要配置不同的ssh-key对应不同的环境. 具体操作步骤如下: 1:生成一个公司用的SSH-Key $ ssh-keygen -t rsa ...

  9. Django设计模式

    单例模式: 建造者模式: 示例: from enum import Enum import time PizzaProgress = Enum('PizzaProgress', 'queued pre ...

  10. Solr索引配置

    Solr主配置文件 schema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的.主要包括FieldTypes.Fields和其他的一些缺省 ...