首页 > 其他分享 >dp动态规划

dp动态规划

时间:2023-09-27 22:02:01浏览次数:31  
标签:f1 f2 return int 题目 动态 规划 dp

数位dp

离谱dp,常用于有位置与位置之间的限制并计数的问题中。通过记忆化搜索求出。

代码大致模板:

const int N = 50;
//数的最高位数,可以往大点开

int s[N], tot;
//栈用来存每位的数值
int dp[N][2][2];
//状态可能还会多一些,大致与 Dfs 状态同步

inline int Dfs(int x, bool f1, bool f2){
//x 表示当前是第几位,f1 表示是否为前缀0部分,f2 表示是否为连续最高位
//后面会依题目加其他限制,视情况而定
	if(){
	//有的题目此处会有无法产生贡献的性质
		return 0;
	}
	if(!x){
	//枚举完了
		return 1;
		//此处看题目要求返回贡献值
	}
	
	if(dp[x][f1][f2] != -1){
	//记忆化
		return dp[x][f1][f2];
	}
	
	int mx = f2 ? s[x] : 9;
	//看当前位的最大取值范围,因题目而异,如十进制为 9 ,二进制为 1
	int sum = 0;
	//统计当前答案用
	
	for(int i = 0; i <= mx; ++ i){
		sum += Dfs(x - 1, f1 && (i == 0), f2 && (i == mx));
		//转移,继承状态
	}
	
	return dp[x][f1][f2] = sum;
	//记忆化
}

inline int ask(int x){
	tot= 0;
	//清空栈
	while(x){
		s[++ tot] = x % 10;
		//取最后一位
		x /= 1;
		//除去最后一位
	}
	memset(dp, -1, sizeof(dp));
	//清空 dp 数组
	return Dfs(tot, 1, 1);
	//返回答案
	//起始状态肯定满足为最大位且为前缀0位
}

标签:f1,f2,return,int,题目,动态,规划,dp
From: https://www.cnblogs.com/biuld/p/17734439.html

相关文章

  • [转载] linux下 GCC编译链接静态库&动态库
    转载自:https://www.cnblogs.com/thechosenone95/p/10605172.html#_label0静态库有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后要讲到的environ变量)。......
  • vue3项目table表格动态表头生成+行数据合并
    这两处地方是动态的,由后端数据返回思路流程  1,后端返回数据二次处理  2,根据后端数据生成动态表头  3,利用antd的customRender与rowSpan设置行合并 完整代码<template><Table:data-source="dataSource":columns="columns":pagination="......
  • Redis系列 - Redis底层数据结构(简单动态字符串(SDS)、链表、字典、跳跃表、整数集合
    转自:https://blog.csdn.net/u011485472/article/details/109460490Redis系列-Redis底层数据结构(简单动态字符串(SDS)、链表、字典、跳跃表、整数集合、压缩列表)简单动态字符串(simpledynamicstring,SDS)链表字典跳跃表整数集合压缩列表RedisObject在介绍Redis底......
  • 规划
    偶尔一次尝试开车的时候听书后,发现这种方式很适合自己,因为回家后要照顾两娃,还有无数的家务等着我,匀给看书的时间少之又少。如果开车时听书,大概每天就能阅读两个小时左右。发现这种方式后,我如饥似渴地开始阅读,大概四五天就能看完一本书,有时是严肃的,如白岩松的《幸福了吗》,有时......
  • 动态规划——矩阵优化DP 学习笔记
    动态规划——矩阵优化DP学习笔记前置知识:矩阵、矩阵乘法。矩阵乘法优化线性递推斐波那契数列在斐波那契数列当中,\(f_1=f_2=1\),\(f_i=f_{i-1}+f_{i-2}\),求\(f_n\)。而分析式子可以知道,求\(f_k\)仅与\(f_{k-1}\)和\(f_{k-2}\)有关;所以我们设矩阵\(F_......
  • UDP之组播
    UDP单播这篇写了UDP单播,接下来深入一点,写一下UDP组播UDP其实还有一个广播,其实也很极端,会向局域网内所有主机广播数据。有的时候我们只想向特定几个主机发送数据,那么只能用组播。组播需要使用组播地址,在IPv4中它的范围从224.0.0.0到239.255.255.255,并被划分为局部链接多播地......
  • 线程池ThreadPool
    1什么是线程池?ThreadPool类命名空间:System.Threading程序集:System.Threading.ThreadPool.dll提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步I/O、代表其他线程等待以及处理计时器。 * 通过线程池创建的线程默认为后台线程,优先级默认为Normal。 ......
  • 动态规划——状压DP 学习笔记
    动态规划——状压DP学习笔记引入前置知识:位运算动态规划的过程是随着阶段的增长,在每个状态维度上不断扩展的。在任意时刻,已经求出最优解的状态与尚未求出最优解的状态在各维度上的分界点组成了DP扩展的“轮廓”。对于某些问题,我们需要在动态规划的“状态”中记录一个集合......
  • [剑指offer] 动态规划篇
    JZ42连续子数组的最大和/*贪心*/publicclassJZ42_1{publicstaticintFindGreatestSumOfSubArray(int[]array){intsum=0,res=Integer.MIN_VALUE;for(inti=0;i<array.length;i++){sum+=array[i];......
  • 动态展示缩放背景图
          有时候在渲染用户上传的图片时,需要根据不同图片宽高进行展示,若固定宽高,则会对图片一定程度的拉伸,导致图片变形,此时直接根据relation 相对位置,使图片的框和背景框动态缩放,宽则同宽,长则同长,直接上效果图           .srcbox-i......