洛谷普及场 (多维动态规划)

7.2 多维动态规划 多维动态规划是动态规划的一个扩展,它处理的问题通常具有多个维度的状态空间。之所以 dp[i][j] 的定义不是 text1[0:i] 和 text2[0:j] ,是为了方便当 i = 0 或者 j = 0 的时候,dp[i][j]表示的为空字符串和另外一个字符串的匹配,这样 dp[i][j] 可以初始化为 0.- 这通常涉及到一个递推关系,比如 `dp[i][j][k] = min(dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1]) + cost(i, j, k)`。 阅读详情

洛谷普及场 (多维动态规划)

- P1508 Likecloud-吃、吃、吃

简单dp,注意是从矩阵的中间下方开始吃

#include <cstdio>
#include <algorithm>
using namespace std ; 
const int N = 205 ; 
int f[N][N] , dp[N][N] ;
int m , n ; 
int main(){
	scanf ("%d%d",&m,&n) ; 
	for (int i = 1 ; i <= m ; ++i)
		for (int j = 1 ; j <= n ; ++j)
			scanf("%d",&f[i][j]) ;
	for (int i = 1 ; i <= n ; ++i)
	    dp[1][i] = f[1][i] ; 
	for (int i = 2 ; i <= m ; ++i){
		for (int j = 1 ; j <= n ; ++j){
			dp[i][j] = max(dp[i-1][j],dp[i-1][j-1]) ; 
			dp[i][j] = max(dp[i][j] , dp[i-1][j+1]) ;
			dp[i][j] += f[i][j] ; 
		}
	}
	int ans = max(dp[m][n/2],dp[m][n/2+1]) ; 
	ans = max(ans,dp[m][n/2+2]) ; 
	printf ("%d\n",ans) ; 
	return 0 ;
}

- P1387 最大正方形
dp[i][j] = x 时,表示从i到j中的所有节点都为1,
当输入的num为1时,说明该数可以作为正方形的下标,然后取上、左及对角线的dp[i][j]的最小值+1即可。

#include <cstdio>
#include <algorithm>
using namespace std ; 
const int N = 105 ; 
int x, dp[N][N] ;
int main(){
    int n , m ; 
	scanf ("%d%d",&n,&m) ; 
	int ans = 0 ;
	for (int i = 1 ; i <= n ; ++i){
		for (int j = 1 ; j <= m ; ++j){
			scanf ("%d",&x) ;
		    if (x == 1){
		        dp[i][j] = min(min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1; 
			    ans = max(ans,dp[i][j]) ; 
		    }
		}
	}
	printf ("%d\n",ans) ; 
	return 0 ;
}

- P1417 烹调方案

本题为01背包,但是又有所不同,01背包中物品的价值是不变的所以对讨论顺序没有要求,但是这道题中时间前后对最后价值有影响所以要先对物品进行排序。
偷看(洛谷)大佬的题解结论:
在这里插入图片描述

#include <cstdio>
#include <algorithm>
using namespace std ;
const int N = 60 ; 
const long long M = 100010 ; 
long long dp[M] ; 
struct node{
	long long a , b , c ;
}p[M] ; 
bool cmp(node x , node y){
	return x.c*y.b < y.c*x.b ; 
}
int main(){
	long long t , n ;
	scanf ("%lld%lld",&t,&n) ;
	for (long long i = 1 ; i <= n ; ++i)	scanf ("%lld",&p[i].a) ;
	for (long long i = 1 ; i <= n ; ++i)	scanf ("%lld",&p[i].b) ;
	for (long long i = 1 ; i <= n ; ++i)	scanf ("%lld",&p[i].c) ;
	sort(p+1,p+1+n,cmp) ; 
	for (long long i = 1 ; i <= n ; i ++){
		for (long long j = t ; j >= p[i].c ; j --){
			dp[j] = max(dp[j],dp[j-p[i].c] + p[i].a - j*p[i].b) ;
		} 
	} 	
	long long ans = 0 ;
	for (int i = 1 ; i <= t ; i ++)
	    ans = max(ans,dp[i]) ; 
	printf ("%lld\n",ans) ; 
	return 0 ;
}

- P1736 创意吃鱼法
题意:给出一个只有0和1的矩阵,找到最长全为1的对角线的矩阵,且除了该对角线其他地方都为0(一开始以为只要对角线全为1就好。。。。)
dp[i][j] 的值为上一对角线元素的和所在行和列0数目的最小值。
然后统计左上到右下和右上到左下的最大值即可。

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std ; 
const int N = 2510 ; 
int fish[N][N] ; 
int dp[N][N] ; 
int f[N][N] ; 
int g[N][N] ; 
int main(){
	int n , m ; 
	scanf ("%d%d",&n,&m) ;
	int ans = 0 ; 
	for (int i = 1 ; i <= n ; ++i){
		for (int j = 1 ; j <= m ; ++j){
			scanf ("%d",&fish[i][j]) ;
			if (!fish[i][j]){
				f[i][j] = f[i][j-1] + 1 ; 
				g[i][j] = g[i-1][j] + 1 ; 
			}
			else{
				dp[i][j] = min(dp[i-1][j-1] , min(f[i][j-1],g[i-1][j])) + 1 ; 
			}
			ans = max(ans,dp[i][j]) ; 
		}
	}
	memset(f,0,sizeof(f)) ; 
	memset(dp,0,sizeof(dp)) ; 
	for (int i = 1 ; i <= n ; ++i){
		for (int j = m ; j >= 1 ; --j){
			if (!fish[i][j])
				f[i][j] = f[i][j+1] + 1 ; 
			else
				dp[i][j] = min(dp[i-1][j+1] , min(f[i][j+1],g[i-1][j])) + 1 ; 
			ans = max(ans,dp[i][j]) ;   
		}
	}
	printf ("%d\n",ans);
	return 0 ;  
}
  • P1855 榨取kkksc03
    01背包的二维,多加一层循环就行。
#include <cstdio>
#include <algorithm>
using namespace std ;
const int N = 110 ; 
const int M = 210 ; 
const int T = 310 ;
int dp[M][T] ; 
int money[N] , times[N] ; 
int main(){
	int t , m , n ; 
	scanf ("%d%d%d",&n,&m,&t) ;
	for (int i = 1 ; i <= n ; i ++)
		scanf ("%d%d",&money[i],&times[i]) ;
	for (int i = 1 ; i <= n ; ++i){
		for (int j = m ; j >= money[i] ; --j){
			for (int k = t ; k >= times[i] ; --k){
				dp[j][k] = max(dp[j][k],dp[j-money[i]][k-times[i]]+1) ; 
			}
		}
	}
	printf ("%d\n",dp[m][t]) ; 
	return 0 ;
}



  • p1006 传纸条
    有点像洛谷的p1004方格取数(数据更小,易过):https://blog.youkuaiyun.com/coder370/article/details/101307787
    从左上角传到右下角,从右下角传到左上角,且走过的点不能再走,可以看做两人同时从左上角出发,但走的点不相同,dp[i][j][k][l],i和j是第一个人走的点,k和l是第二个人走的点。
#include <cstdio>
#include <algorithm>
using namespace std ;
const int N = 60 ; 
bool vis[N][N] ; 
int dp[N][N][N][N] ; 
int a[N][N] ; 
int main(){
	int m , n ; 
	scanf ("%d%d",&n,&m) ;
	for (int i = 1 ; i <= n ; ++i)
		for (int j = 1 ; j <= m ; ++j)
			scanf ("%d",&a[i][j]) ; 
	for (int i = 1 ; i <= n ; ++i){
		for (int j = 1 ; j <= m ; ++j){
			for(int k = 1 ; k <= n ; ++k){
				for (int l = 1 ; l <= m ; ++l){
					dp[i][j][k][l] = max(
						max(dp[i-1][j][k][l-1] , dp[i][j-1][k][l-1]) ,
						max(dp[i-1][j][k-1][l] , dp[i][j-1][k-1][l]) 
					) + a[i][j] + a[k][l] ; 
					if (i == k && j == l)
						dp[i][j][k][l] -= a[i][j] ; 
				}
			} 
		}
	}
	printf ("%d\n",dp[n][m][n][m]) ;
	return 0 ;
}
HOT100(九)多维动态规划 维护一个二维数组f,f[i][j]表示从起点到(i,j)的路径数。已知初始化f[0][0]=1,即机器人在起点的路径是1;机器人到达第一列f[:][0]只能走下来,因此第一列的每个元素都为1;机器人到达第一行f[0][:]只能走下来,因此第一行的每个元素都为1。这是因为机器人到达一个点,只能从上方和左方走过来,因此。 阅读详情

相关推荐

洛谷 - 试炼场(全部题目备份)

新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000次同样的事它也不怕啦,但是让他做1亿亿次的话…… P1008 P1035 P1423 P1424 P1980 数组 跟数组有关

繁凡さん的博客 4307

算法与数据结构----动态规划专题

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

爱哭的冰激凌 1502

一文搞懂深度学习:最全神经网络介绍

本文是深度学习系列文章的第二篇,我们将深入探讨各种类型的人工神经网络,探索它们独特的特性和应用。

2402_82802238的博客 2802

力扣75——多维动态规划

力扣75——多维动态规划

weixin_45034895的博客 459

VOS3000线路对接、路由配置与路由分析操作教程

通过本教程,你应该已经掌握了VOS3000的线路对接、路由配置和路由分析的基本操作。添加备用路由:为常用前缀添加备用路由,确保在主路由失效时呼叫仍能正常进行。进入线路管理:点击“系统管理” -> “线路管理” -> “添加线路”。查看日志:在“系统日志”中查看路由选择情况,确保路由配置正确。失败原因:查看失败呼叫的原因(如“无应答”、“线路忙”等)。线路选择:选择之前添加的线路(如“供应商A”)。保存并启用:填写完毕后,点击“保存”并启用路由。路由名称:自定义一个名称(如“路由A”)。

AI_wx_3307623172的博客 2976

新手必看:用Simulink搭建飞跨电容三电平逆变器的完整流程(附SPWM配置技巧)

本文详细介绍了使用Simulink搭建飞跨电容三电平逆变器(FCNPC)的完整流程,特别聚焦于SPWM调制策略的配置技巧。通过模块拆解、参数设置和波形优化的三步法,配合实操截图和典型参数表,帮助新手快速掌握多电平逆变器的建模与仿真技能,适用于电力电子学习和项目开发。

weixin_30664051的博客 288

LeetCode 热题100 之 多维动态规划

动态规划真滴难~

qq_43060884的博客 1547

基于RK3588平台的高分辨率多摄像头系统深度优化:从48M单摄到双摄分时复用的完整解决方案

本文深入解析了RK3588平台的高分辨率摄像头实现方案。重点介绍了:1)RK3588的MIPI PHY硬件架构,包括DCPHY和DPHY的资源配置及工作模式;2)双ISP合成技术,通过并行处理提升48M高分辨率图像的处理能力;3)以OV50C40传感器为例,详细展示了48M单摄系统的硬件连接、I2C设备配置和关键参数设置。文章为开发者提供了从硬件连接到软件配置的完整技术方案,有助于实现高性能嵌入式视觉系统。

FJN110的博客 675

洛谷试炼场------题目

新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000...

mrcrack的博客 2万+

Android 15.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在15.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 1204

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2812

洛谷 P1541 乌龟棋 多维动态规划

洛谷 P1541 乌龟棋 多维动态规划 题解: dp[a][b][c][d]:表示你出了a张爬行牌1,b张爬行牌2,c张爬行牌3,d张爬行牌4时的得分 sum[x]:表示牌x一共有多少张 起始状态dp[0][0][0][0]=num[1],即不出任何爬行卡 之后对于每一张卡片,我们都可以选择放与不放, 比较卡一的放与不放,只需决策卡一的放与不放,即取dp[a][b][c][d],dp[a-1][b...

化身孤岛的鲸o的博客 569

YOLO26科研升级:BiFPN双向特征金字塔,让多尺度特征融合精度再突破

在目录下,新建AddModules文件夹,将bifpn.py放入其中。

LXY_LOVE36的博客 559

洛谷试炼场——题目单

洛谷试炼场已关闭,大家看看这个吧 新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000次同样的事它也不怕啦,但是让他做1亿亿次的话…… P1008 P1035 P1423 P1424 P19

Tonvia的博客 2166

企业合规审查系统开发实战:基于知识图谱与深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 456

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

洛谷试炼场

新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000次同样的事它也不怕...

Brian_Pan_的博客 952

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【洛谷】题解目录

#1 新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里 小玉买文具(洛谷-P1421):点击这里 小鱼的游泳时间(洛谷-P1425):点击这里 关卡1-2 顺序与分支 小玉家的电费(洛谷-P1422):点击这里 不高兴的津津(洛谷-P1085):点击这里 津津的储蓄计划(洛谷-P1089)...

Alex_McAvoy的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《算法竞赛实战笔记》第4章 动态规划 (4)、多维动态规划

《算法竞赛实战笔记》第4章 动态规划 (4)、多维动态规划

青少年趣味编程 1312

洛谷-多维动态规划-传纸条

题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊...

【小妮的天空】 384

多维动态规划

ACM题集:https://blog.youkuaiyun.com/weixin_39778570/article/details/83187443 动态规划:https://blog.youkuaiyun.com/weixin_39778570/article/details/87014343 P1508 Likecloud-吃、吃、吃 给定一个二维表,从最下一行中间遍历到最顶行,输出途径的格子和的最大值 ------...

越看越喜欢啊 2200

洛谷—P1541 乌龟棋(多维动态规划)

F[a][b][c][d]:表示你出了a张爬行牌1,b张爬行牌2,c张爬行牌3,d张爬行牌4时的得分 #include<iostream> #include<algorithm> #include<stdio.h> #include<cstring> #include<queue> #include<iostream> us...

weixin_43784305的博客 235

【算法基础篇】(三十二)动态规划之背包问题扩展:从多重到多维,解锁背包问题全场景

本文系统介绍了四种背包问题的扩展模型:多重背包(物品有使用次数限制)、分组背包(每组物品互斥选择)、混合背包(多种选择规则并存)和多维费用背包(多重资源约束)。通过分析各模型的核心约束条件,详细讲解了状态转移方程的设计思路和优化技巧,并提供了C++代码实现。文章强调所有扩展模型都是基础背包的规则变种,关键在于理解"选择规则"的差异并转化为对应的动态规划逻辑。最后总结了常见误区、优化技巧以及各模型的适用场景,帮助读者系统掌握背包问题的进阶解法。

2301_79248256的博客 1291

洛谷的题目精选(由易到难)

在洛谷也能玩到闯关游戏

1460

原洛谷试炼场

任何一个伟大的目标,都有一个微不足道的开始。

CppZYL的博客 425

洛谷P1004方格取数(四维动态规划)

代码: #include <stdio.h> int plat[10][10]; int dp[11][11][11][11]; int max(int a,int b,int c,int d){ int ans=a; if(b>ans)ans=b; if(c>ans)ans=c; if(d>ans)ans=d; return ans; } int main() { int N; scanf("%d",&N); .

小郁同学 342
上一篇: 洛谷普及场(高精度算法)
下一篇: 洛谷普及场(广搜)
coder370
博客等级 码龄8年 4粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值