首页 > 其他分享 >数位 dp 写法

数位 dp 写法

时间:2023-10-17 17:39:31浏览次数:33  
标签:int tot lst num 数位 写法 dp op

众所周知,数位 dp 是一种难写难调的 sb dp,这里记录一种便于调试的写法。

  1. 对于一个区间询问 \([a,b]\),可以把它拆分成 \([1,b]\) 和 \([1,a-1]\) 两个部分作差,并使用函数 \(solve(x)\) 计算出 \([1,x]\) 的答案,将答案的形式改写为 \(solve(b)-solve(a-1)\) 以减小码量;
  2. 对于状态转移与答案输出,使用记忆化搜索,其明显简单于直接循环 dp;
  3. 对于一个数的表示,直接用 vector 存储也许会方便很多。

示例代码:

// 题目名称:不要 62
int dfs(int x, int lst, bool op)
// x 表示当前枚举位置,lst 表示上一个数,op 表示该数是否有限制
{
	if (!x) return 1;
	if (!op && ~dp[x][lst]) return dp[x][lst];

	int mx = op ? num[x] : 9, tot = 0;
	rep(i, 0, mx) {
		if (i == 4) continue;
		if (lst == 6 && i == 2) continue;
		tot += dfs(x - 1, i, op && i == mx);
	}

	if (!op) dp[x][lst] = tot;
	return tot;
}

int solve(int x)
{
	num.clear();
	num.emplace_back(-1); // 空位置
	while (x) num.emplace_back(x % 10), x /= 10;
	return dfs(num.size() - 1, 0, 1);
}

本篇博客只讲了写法,只因我是一个鸽子(咕咕咕)。。。

标签:int,tot,lst,num,数位,写法,dp,op
From: https://www.cnblogs.com/cqbzljh/p/17770201.html

相关文章

  • HDPE双壁波纹管,市政排污好帮手
    HDPE双壁波纹管是一种用于市政排污系统的重要设备,可以被视为市政排污的好帮手。HDPE双壁波纹管具有以下几个优点:优良的耐腐蚀性:HDPE材料具有优异的耐腐蚀性,可以抵抗各种化学物质的侵蚀,确保管道长久使用。高强度和刚度:HDPE双壁波纹管具有良好的强度和刚度,能够承受较大的外部负荷和压......
  • HDPE双壁波纹管材给排水系统的明星材料
    随着城市化进程的不断推进,给排水系统的建设也越来越受到重视。作为给排水系统的重要组成部分,管道材料的选择和设计也显得尤为重要。其中,HDPE双壁波纹管材作为一种新型的高密度聚乙烯管道材料,在市政给排水系统中得到了广泛应用。本文将从以下几个方面对HDPE双壁波纹管材进行详细介绍......
  • SPI 接口 CAN协议控制器 MCP2515/DP2515国产替代芯片DPC15
    can控制器是CAN局域网控制器的简称,为解决现代汽车中众多测量控制部件之间的数据交换而开发的一种串行数据通信总线。CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。can控制器最初是为汽车的监测、控制系统而......
  • DPDK丢包那些事
    本文来自博客园,作者:T-BARBARIANS,博文严禁转载,转载必究! 一、前言DPDK技术原理相关的文章不胜枚举,但从实战出发,针对DPDK丢包这一类问题进行系统分析的文章还是凤毛麟角。刚好最近几个月一直在做DPDK的相关性能优化,x86和arm平台都在做。在完整经历了发现问题、分析问题......
  • 流式输出写法
    后台使用 Server-SentEvents技术,简称SSE,是一种基于HTTP协议的服务器推送技术,允许服务器向客户端发送数据和信息。与WebSocket不同,SSE是一种单向通信方式,只有服务器可以向客户端推送消息。SSE是HTML5规范的一部分,使用非常简单,主要由服务端与浏览器端的通讯协议(HTTP......
  • 弹弹床(连续段dp)
    题目简述一排格子,每个格子上有“L”或“R”,表示向左或向右跳到任意位置。问从任意位置出发跳完所有的格子在第\(i\)格子结束的方案数。答案对\(10^9+7\)取模。分析&性质考虑一个选取方案,取的位置序列为排列与相对位置有关的信息可以考虑插入顺序最终思路使用连续......
  • Go - Creating a UDP Client
    Problem: YouwanttocreateaUDPclienttosenddatatoaUDPserver.Solution: UsetheDialfunctioninthenetpackagetoconnecttoaUDPserver.ThenusetheWritemethodofthenet.UDPConninterfacetowritedatatotheconnection. CreatingaUDP......
  • Go - Creating a UDP Server
    Problem: YouwanttocreateaUDPservertoreceivedatafromaUDPclient.Solution: UsetheListenPacketfunctioninthenetpackagetolistenforincomingpackets.ThenusetheReadFrommethodofthePacketConninterfacetoreaddatafromtheconnecti......
  • 前端打怪之旅=>Es6入门(对象简化写法、函数)
    对象的简化写法ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法这样的书写更加简洁letname='浅辄';letchange=function(){console.log('我可以改变世界');}constschool={......
  • What Is a DPU?
    一、Wikipedia介绍Adataprocessingunit(DPU)isaprogrammablecomputerprocessorthattightlyintegratesageneral-purposeCPUwithnetworkinterfacehardware.Sometimestheyarecalled"IPUs"(for"infrastructureprocessingunit")or&......