题意

一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少数使得F(x) <= F(A)。多组数据,T <= 10000

思路

成都网赛……都是泪T_T……

很裸的数位DP……一开始我的dp状态是dp[pos][fx],fx表示当前枚举到fx为多少,判断fx<=fa。但这样设计状态的一个问题是对于不同的A,dp[][]表示的状态不同,所以每个T都有memset dp数组,并且重新计算,然后就超时了哭……

后来被nocLty指点……dp状态设计成dp[pos][remain],remain表示还剩多少fA可以分配,判断remain>=0。这样对于不同的A便不影响他的状态表示。所以不用每次T都重新计算dp[][],大大缩短了时间。

总结一下,在设计数位DP状态时最好把每次询问的变量作为初始值而不是状态转移、判定时依赖的量(比如第一个状态判定条件是fx<=fa,就依赖于当前fa,这样就不好),这样才可以最大限度的发挥记忆化的作用。

代码

[cpp]
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cmath&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;vector&gt;
#include &lt;set&gt;
#include &lt;stack&gt;
#include &lt;queue&gt;
#define MID(x,y) ((x+y)/2)
#define MEM(a,b) memset(a,b,sizeof(a))
#define REP(i, begin, end) for (int i = begin; i &lt;= end; i ++)
using namespace std;
vector &lt;int&gt; num;
int dp[11][10000];
int dfs(int pos, int remain, int limit){
if (pos == -1){
return (remain &gt;= 5000);
}
if (!limit &amp;&amp; ~dp[pos][remain]) return dp[pos][remain];
int end = limit?num[pos]:9;
int res = 0;
for (int i = 0; i &lt;= end; i ++){
res += dfs(pos-1, remain-(1&lt;&lt;pos)*i, limit &amp;&amp; (i == end));
}
if (!limit){
dp[pos][remain] = res;
}
return res;
}
int main(){
int t;
scanf(&quot;%d&quot;, &amp;t);
MEM(dp, -1);
for (int ca = 1; ca &lt;= t; ca ++){
int A, B;
scanf(&quot;%d %d&quot;, &amp;A, &amp;B);
num.clear();
while(B){
num.push_back(B % 10);
B /= 10;
}
int fa = 0;
for (int i = 0; A; A /= 10, ++ i){
fa += (1 &lt;&lt; i) * (A % 10);
}
printf(&quot;Case #%d: %d\n&quot;, ca, dfs(num.size()-1, 5000+fa, 1));
}
return 0;
}
[/cpp]

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

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

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

  2. 【数位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 ...

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

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

  4. 题解——HDU 4734 F(x) (数位DP)

    这道题还是关于数位DP的板子题 数位DP有一个显著的特征,就是求的东西大概率与输入关系不大,理论上一般都是数的构成规律 然后这题就是算一个\( F(A) \)的公式值,然后求\( \left [ 0 ...

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

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

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

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

  7. 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的时候的个数,然后需要预处理下小 ...

  8. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  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. 工作笔记——js前端规范

    去年年末做了一个项目,因为第一次做前端管理职位,第一次做整个项目的前端架构很多东西都不熟悉,作为一次大胆的尝试. js方面的只有一个坑,那就是前端与后端的网络层封装,这一块是在后端的协助下开发的.网络 ...

  2. co.js异步回调原理理解

    co.js是基于es6的generator实现的,相当于generator函数的一个自动执行器 generator的简单介绍 function* fn(){ before() yield firstY ...

  3. [Windows Powershell]-学习笔记(1)

      Powershell 快捷键 Powershell的快捷键和cmd,linux中的shell,都比较像.   ALT+F7     清除命令的历史记录 PgUp PgDn     显示当前会话的第 ...

  4. matplotlib.pyplot 让数据可视化

    1.条形图 import matplotlib.pyplot as plt plt.style.use('ggplot') # 使用ggplot样式来模拟ggplot2风格的图形,ggplot2是一个 ...

  5. Method Swizzling 剖析

    一.背景介绍 关于Method Swizzling的文章一大堆,讲的非常好的也数不胜数.不过,很多人只是会用,知道一些注意点.深入一点问的话,估计就答得不好.归其原因就是对Method Swizzli ...

  6. netty12---线程池简单源码

    package com.cn; import java.io.IOException; import java.nio.channels.Selector; import java.util.Queu ...

  7. Webpack -- 基础篇

    篇仅演示 webpack 的基础搭建,为入门和走通基本流程而写.仅 window 系统. 1. 安装一些东西 安装 nodeJS,下载链接.然后检查安装是否完成. 系统“开始”和“R”键同时按住,桌面 ...

  8. Web前端学习笔记之jQuery基础

    0x0 jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Aja ...

  9. 20145314郑凯杰 《Java程序设计》实验二 实验报告

    20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...

  10. 20145322何志威 《Java程序设计》课程总结

    课程总结 每周读书笔记链接汇总 •第一周读书笔记 •第二周读书笔记 •第三周读书笔记 •第四周读书笔记 •第五周读书笔记 •第六周读书笔记 •第七周读书笔记 •第八周读书笔记 •第九周读书笔记 •第十 ...