洛谷 P2258 NOIP2014普及组 T4 子矩阵 DFS+DP

这里写图片描述
数据范围:1≤n≤16,1≤m≤16,矩阵中每个元素1≤a[i][j]≤1000,1≤r≤n,1≤c≤m

看到数据范围,行与列的范围只有16,首先想到搜索,枚举取舍,时间复杂度达到O(2^(n+m)) ,时间承受不了
对于多维问题,常见的思路是降维
在枚举行之后,对列可以DP。
在选完行以后,每一列上行与行之间的得分就可以计算了,列与列之间的得分即为两列上横向差值的绝对值,这样就把二维压缩成一维了。
2^m -> m^3 时间复杂度骤减
f[i,j]=f[k,j-1]+lc[k,i]+rc[i]
f[i,j]表示以i列结尾,共j列的最小得分
lc[k,i]表示第k列和第i列的横向的差
rc[i]表示第i列上下元素的差
(是我太笨想不到先搜再DP T_T)

#include <cstdio>
#include <cstdlib>
#include <cstring>
#define min(a,b) (a<b?a:b)
using namespace 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值