这道题还是关于数位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#回调浅析(委托、接口回调)

    https://wenku.baidu.com/view/ed724173bd64783e08122b2f.html

  2. 【Hadoop学习之十三】MapReduce案例分析五-ItemCF

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 推荐系统——协同过滤(Collab ...

  3. java 泛型E T ?的区别

    Java泛型中的标记符含义:  E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number ...

  4. flask实战-个人博客-使用蓝本模块化程序

    使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...

  5. ptrace线程

    在ptrace时使用waitpid(-1, &status, 0);无法正常trace 修改为waitpid(-1, &status, __WALL);即可 原因是:

  6. 使用jwt

    jwt:json web token 使用jwt的好处1,无状态2解耦3,更适合于移动端Android,ios4,性能更好5,能够不考虑csrf攻击 ①,客户端请求 Date date = new D ...

  7. Python文件读写、StringIO和BytesIO

    1 IO的含义 在计算机中,IO是Input/Output的简写,也就是输入和输出. 由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就 ...

  8. 远程图片转化为base64

    远程图片转化为base64 <?php /* * * 第一种方法 * 远程图片转化为base64,只支持http(推荐使用) * */ public static function imgUrl ...

  9. 小程序 canvas实现图片预览,图片保存

    wxml 代码: <view class="result-page"> <canvas bindtap="previewImage" canv ...

  10. socket编程-阻塞和非阻塞

    转自:https://www.cnblogs.com/sunziying/p/6501045.html 建立连接 阻塞方式下,connect首先发送SYN请求道服务器,当客户端收到服务器返回的SYN的 ...