首页 > 其他分享 >HDU 不要62 题解

HDU 不要62 题解

时间:2024-08-11 17:16:13浏览次数:15  
标签:HDU ch return int 题解 62 lim dp 数位

题目传送门

思路

数位 dp

数位 dp

数位 dp 模版题。

依次考虑每一位,满足题目给出的限制,统计数量,是一些较简单的数位 dp 题目的过程。

数位 dp 运用了差分的思想,即求 \(ans(l - r)\) 的答案用 \(ans(1 - r) - ans(1-(l - 1))\) 来表示.

对于本题,我们需要满足的性质很简单:

  1. 使数不超过上界,如求 \([5 - 1000]\) 不能使 \(1005\)
  2. 考虑到某一位时,如果其前一位为 \(6\),那么则一位不能为 \(2\),如果这一位填了 \(6\),下一位不能填 \(2\)。
  3. 任何一位不能是 \(4\)。

条件 1 是数位 dp 的常规操作,条件 2 和 条件 3 均可以在 dp 过程中通过检查标记来满足。

具体见代码。

代码

点击查看代码
/*
  --------------------------------
  |        code by FRZ_29        |
  |          code  time          |
  |          2024/08/11          |
  |           16:09:04           |
  |             星期天            |
  --------------------------------
                                  */

#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio>
#include <ctime>

using namespace std;

void RD() {}
template<typename T, typename... U> void RD(T &x, U&... arg) {
    x = 0; int f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); }
    while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
    x *= f; RD(arg...);
}

const int N = 1e6 + 5, M = 10;

#define LF(i, __l, __r) for (int i = __l; i <= __r; i++)
#define RF(i, __r, __l) for (int i = __r; i >= __l; i--)

int n, m, num[N];
int f[M][2][2];

int dfs(int u, bool lim, bool lim_6) { // lim 为条件 1 的限制,lim_6 为条件 3 的限制
    if (u == 0) return 1;
    if (f[u][lim][lim_6] != -1) return f[u][lim][lim_6]; // 记忆化搜索能优化时间复杂度
//    printf("u = %d, lim = %d, lim_6 = %d\n", u, lim, lim_6);
    int up = (lim ? num[u] : 9);
    f[u][lim][lim_6] = 0;
    LF(i, 0, up) {
        if (i == 4 || (lim_6 && i == 2)) continue;
        f[u][lim][lim_6] += dfs(u - 1, lim == true & i == up, i == 6);
    }
    return f[u][lim][lim_6];
}

int calc(int n) {
    if (n < 0) return 0;
    int tmp = n;
    int cnt = 0;
    while (tmp) num[++cnt] = tmp % 10, tmp /= 10;
    LF(i, 1, cnt) LF(j, 0, 1) LF(k, 0, 1) f[i][j][k] = -1;
    return dfs(cnt, 1, 0);
}

int main() {
    // freopen("read.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    // time_t st = clock();
    while (RD(n, m), n, m) printf("%d\n", calc(m) - calc(n - 1));
    // printf("\n%dms", clock() - st);
    return 0;
}

/* ps:FRZ弱爆了 
 * 这是 FRZ 第 1 道数位 dp 题
 * FRZ做的太少了(悲
 * 真是弱爆了
 */

在逆风里把握方向,做暴风雨中的海燕,做不改颜色的孤星。

标签:HDU,ch,return,int,题解,62,lim,dp,数位
From: https://www.cnblogs.com/FRZ29/p/18353639

相关文章

  • HDU-ACM 2024 Day2
    T1004a*bproblem(HDU7448)不会。T1005小塔的养成游戏之梦(HDU7449)不会。T1009强攻计策(HDU7453)容易发现初始速度是多少对答案没有影响,所以我们默认初始速度为\(0\)。题意相当于在平面直角坐标系上(横轴为时间,纵轴为速度),有一个目标高度,维护一条尽量接近目标的直线,但......
  • P1502 窗口的星星 题解
    题目传送门。思路扫描线扫描线首先,将题目中给出的条件和问题进行转化:首先先不考虑边框上的点不算在内的限制,考虑一个点可以对那些矩形产生贡献。只考虑矩形的右上角,容易发现,每个星星的亮度只对右上角在以星星为左下角的长为\(W\),高为\(H\)的矩形有贡献。如图。那么便可......
  • 洛谷 4道水题 题解(字符串入门)
    题目目录:No.1 B2109统计数字字符个数 No.2 B2110找第一个只出现一次的字符 No.3 B2111基因相关性No.4 B2113输出亲朋字符串OK开始正文!第一题:B2109统计数字字符个数题目描述输入一行字符,统计出其中数字字符的个数。输入格式一行字符串,总长度不超过 255。......
  • ABC366简要题解
    C直接维护一个桶,表示每个元素当前的出现次数。再利用这个桶直接维护答案即可。D三维前缀和模板题。E注意到答案中只会出现\(O(n)\)个不同\(x\),以及\(O(n)\)个不同的\(y\)。于是单独考虑\(x\)和\(y\),最后尺取求一下答案即可。F首先我第一个尝试的思路是贪心,但是......
  • Buuctf-Mysterious另类逆向题解
    下载发现是一个exe可执行文件双击运行,输入密码123456没有任何反应,当然没反应,密码肯定不对请出IDApro,我这里用IDAProv8.3演示,把exe文件拖拽到IDA打开按shift+F12快捷键搜索字符串我们发现第二行有可疑字符串,有flag嫌疑,双击上面的welldonewelldone里“Buff3r_0......
  • Codeforces Round 965 (Div. 2) 题解
    个人难度顺序:A<D<B<C<E。A.FindKDistinctPointswithFixedCenter如果\(k\)是偶数,构造\((x_c+i,yc+i)\),其中\(-\frac{k}{2}\lei\le\frac{k}{2}\)。对于\(k\)是奇数,先加一个点\((xc,yc)\),然后就变成偶数的情况了。B.MinimizeEqualSumSubarr......
  • ISO 26262中的失效率计算:IEC TR 62380-Section 18-Protection devices
    目录概要1元器件分类2失效率的计算2.1失效率预测模型2.2Base失效率的选取2.3λoverstress的计算2.3.1πI的选取2.3.2电过应力失效率的选取概要IECTR62380《电子组件、PCBs和设备的可靠性预计通用模型》是涵盖电路、半导体分立器件、光电组件、电阻器、电......
  • ISO 26262中的失效率计算:IEC TR 62380-Section 17-Displays, solid state lamps
    目录概要1元器件分类2显示器失效率的计算2.1Displays失效率预测模型2.2Base失效率2.3温度循环De-rating系数3固态灯失效率的计算3.1Solidstatelamps失效率预测模型2.2温度循环De-rating系数概要IECTR62380《电子组件、PCBs和设备的可靠性预计通用模型......
  • [E::bgzf_read_block] Invalid BGZF header at offset 21062256536
     001、samtools排序报错如下:[E::bgzf_read_block]InvalidBGZFheaderatoffset2106225653 问题原因:samtools转为sam格式为bam文件格式;和bam排序samtools格式不一致: a、将sam文件转换为bam文件用的samtools版本为:(base)[sy20213040737@admin2batch1]$samtools......
  • ABC366-D 题解
    三维前缀和板子。三维前缀和可以类似二维前缀和来做,先给一下二维前缀和数组的计算方法:\[sum_{i,j}=a_{i,j}+sum_{i-1,j}+sum_{i,j-1}-sum_{i-1,j-1}\]同样的,可以写出三维前缀和数组的计算方法:\[sum_{i,j,k}=a_{i,j,k}+sum_{i,j,k-1}+sum_{i,j-1,k}+sum_{i-1,j,k}-sum_{i,j-1,k......