hdu4734 F(x)

F(x)

HDU - 4734

题目大意:

给出f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)<=f(a)的i的个数。

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10010
using namespace std;
int all,a,b,dp[20][maxn],len,bit[20],Case;
int f(int x){
    int res=0,w=1;
    while(x){
        int now=x%10;
        x/=10;
        res+=now*w;
        w*=2;
    }
    return res;
}
int dfs(int pos,int sum,int limit){
    if(pos==0)return sum<=all;
    if(sum>all)return 0;
    if(!limit&&dp[pos][all-sum]!=-1)return dp[pos][all-sum];
    int end=limit?bit[pos]:9;
    int ans=0;
    for(int i=0;i<=end;i++){
        ans+=dfs(pos-1,sum+i*(1<<(pos-1)),limit&&i==end);
    }
    if(!limit)dp[pos][all-sum]=ans;
    return ans;
}
int solve(int x){
    len=0;
    while(x){
        bit[++len]=x%10;
        x/=10;
    }
    return dfs(len,0,1);
}
int main(){
    //freopen("Cola.txt","r",stdin);
    memset(dp,-1,sizeof(dp));
    int n;
    scanf("%d",&n);
    for(Case=1;Case<=n;Case++){
        scanf("%d%d",&a,&b);
        all=f(a);
        printf("Case #%d: %d\n",Case,solve(b));
    }
}
时间: 2024-10-10 21:09:38

hdu4734 F(x)的相关文章

HDU4734——F(x)(数位DP)

dp[i][j]表示i位数权值不超过j的数的个数 注意点: dp[i][j]的值不用每次都初始化,因为它的值不受输入的影响,如果前面算过了就直接拿来用,没算过就拿来算并记录下来 <strong>#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<queue> #include&

HDU4734 F(x) 题解 数位DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 题目大意: 对于一个 \(n\) 位十进制数 \(x\) (\(A_nA_{n-1}A_{n-2} \cdots A_2A_1\)),我们定义 \[F(x)=A_n \times 2^{n-1} + A_{n-1} \times 2^{n-2} + \cdots + A_2 \times 2 + A_1 \times 1\] 现在给你两个数 \(A\) 和 \(B\) ,请计算出区间 \([0

过分过分进货价获国家

http://f.dangdang.com/group/24554/3491082/http://f.dangdang.com/group/24554/3491087/http://f.dangdang.com/group/24554/3491094/http://f.dangdang.com/group/24554/3491099/http://f.dangdang.com/group/24554/3491105/http://f.dangdang.com/group/24554/349111

我们找个地方看好戏

http://v.qq.com/page/f/y/4/m041433ssun.html http://v.qq.com/page/f/y/4/m041433ssun.html http://v.qq.com/page/f/y/4/m04143o3lhg.html http://v.qq.com/page/f/y/4/m04144675h3.html http://v.qq.com/page/f/y/4/m04144k1k1j.html http://v.qq.com/page/f/y/4/m04

【hdu4734】【F(x)】数位dp + 小小的总结一下

(https://www.pixiv.net/member_illust.php?mode=medium&illust_id=65608478) Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1. Now you are given

【hdu4734】F(x)-数位DP

题目描述: For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1.  Now you are given two numbers A and B,  please calculate how many numbers are there between 0 and B, in

hdu4734 数位dp + 小技巧

hdu-4734 题意:假设x的10进制数每一位分别为(AnAn-1An-2 ... A2A1),定义  F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求1-b中F(x)<=F(a)的数有多少个 思路:其实F(x)只是给每一个数位带上一个权值v=2^(p-1),F(x)最大是值不会超过5000,我们完全可以抛开权值来思考,写代码的时候再加上权值即可,这样思考和写草稿之类的会方便很多,不考虑每一位的权值的话即是数位的前缀和, 很容易想

bat中for /f 如何截取任意行

一.概述 for命令开关有很多,/L,/F,/R.这里仅对含有/F的for进行分析,这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果. 1.命令格式:(1).FOR /F ["options"] %%i IN (file) DO command(2).FOR /F ["options"] %%i IN ("string") DO command--注意双引号(3).FOR /F ["options"]

2017 ACM-ICPC 西安网络赛 F.Trig Function Chebyshev多项式

自己太菜,数学基础太差,这场比赛做的很糟糕.本来想吐槽出题人怎么都出很数学的题,现在回过头来想还是因为自己太垃圾,竞赛就是要多了解点东西. 找$f(cos(x))=cos(nx)$中$x^m$的系数模998244353. wolfram alpha查了这个函数无果,得到了一堆sinx和cosx以及一个复指数的方程,其实应该推个几项再用数列查询查查看的,然后就会知道是Chebyshev polynomials 查WIKI直接就有通项公式了.然后就比较简单的了. 连方程都看不出来就别想着推导公式了.