首页 > 其他分享 >玉蟾宫(悬线dp)

玉蟾宫(悬线dp)

时间:2024-02-22 16:55:06浏览次数:23  
标签:格子 玉蟾 int 悬线法 悬线 障碍 dp


求最大子矩阵一般用采用悬线法 (包好用的牢底)
悬线法:

  • [ 以这道题为例,我们将R称为障碍格子,将F称为非障碍格子]
  • 我们选择任意一个非障碍格子,引出三条直线:左直 右直 上直

  • 随后从这个点出发,分别向上 左 右延申直到遇到障碍格

我们要求上悬线尽可能高的面积, 但有可能上一层的左直线比这一层短,所以不能直接傻傻地用上*(右-左+1);
所以要让左悬线尽可能大,右悬线尽可能小
最后轮流求每个非障碍点能延伸到的最大面积

公主请欣赏代码
#include<bits/stdc++.h>
using namespace std;

const int N = 1e3+10;
int n, m, ans;
char a[N][N];
int h[N][N], l[N][N], r[N][N];

int main(){
	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			cin >> a[i][j];
			h[i][j] = 1; l[i][j] = r[i][j] = j;//将悬线都初始化
		}
	}
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			if(a[i][j] == 'F' and a[i][j-1] == 'F') l[i][j] = l[i][j-1];//延伸左悬线
		}
		for(int j=1; j<=m; j++){
			if(a[i][j] == 'F' and a[i-1][j] == 'F') h[i][j] = h[i-1][j] + 1;//延伸上悬线
		}
		for(int j=m; j>=1; j--){
			if(a[i][j] == 'F' and a[i][j+1] == 'F') r[i][j] = r[i][j+1];//延伸右悬线
		}
	}
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			if(a[i][j] == 'F' and a[i-1][j] == 'F'){
				l[i][j] = max(l[i][j], l[i-1][j]);
				r[i][j] = min(r[i][j], r[i-1][j]);
			}
			if(a[i][j] == 'F'){
				ans = max(ans, h[i][j] * (r[i][j] - l[i][j] + 1));
			}
		}
	}
	printf("%d", ans*3);
	return 0;
}

标签:格子,玉蟾,int,悬线法,悬线,障碍,dp
From: https://www.cnblogs.com/w1210323/p/18027692

相关文章

  • linux常用命令--dpkg
    dpkg是Debain系列linux发行版本中的重要命令,用于管理软件包,安装、配置、卸载等等。更多介绍请参考官方文档:www.dpkg.orgdpkg常用参数:dpkg-ipackage_file.deb安装指定软件包 dpkg-igvim.debdpkg-rpackage_file.deb删除以安装的软件包,但保留配置文件 dpkg-rgv......
  • dp 学习笔记 (2024/2/22 - )
    计数[ARC107D]NumberofMultisets[ARC104D]MultisetMean大值域限制偏序计数[CF1295F]GoodContest[ARC104E]RandomLIS......
  • Qt QWindowsWindow::setGeometryDp: Unable to set geometry问题
    总结原因:由于子窗口和父窗口的大小关系不健康,导致父窗口resize失败,失败后会自定义大小解决方法:首先,修改父窗口尺寸,保证其大小可以容纳子部件,可以使用setFixSize()之类的函数修改父窗口尺寸。其次,一定要保证修改父窗口尺寸的函数是放在窗口布局代码之前,如图,我的setIn......
  • Keras深度强化学习--DPG与DDPG实现
    DQN系列算法对连续空间分布的action心有余而力不足,而PolicyGradient系列的算法能够有效的预测连续的动作。在此基础上DPG和DDPG算法被提了出来,并且能够有效地处理连续动作问题。Paper:DPG:DeterministicpolicygradientalgorithmsDDPG:ContinuousControlwithDeepReinforce......
  • 解密prompt系列24. RLHF新方案之训练策略:SLiC-HF & DPO & RRHF & RSO
    去年我们梳理过OpenAI,Anthropic和DeepMind出品的经典RLHF论文。今年我们会针对经典RLHF算法存在的不稳定,成本高,效率低等问题讨论一些新的方案。不熟悉RLHF的同学建议先看这里哦解密Prompt7.偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析RLHF算法当前存在的一些问题有RL的......
  • m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译码算法......
  • 树上dp——cf_928_G. Vlad and Trouble at MIT
    目录问题概述思路分析参考代码做题反思问题概述原题参考:G.VladandTroubleatMIT某学校的宿舍可以用一棵n个顶点的树来表示,每个顶点代表一个房间,房间内有一个学生,树是一个联通的无向图。今天晚上有三种学生:参加派对和玩音乐的学生(标记为P)想睡觉和享受安静的学生(标记为S)......
  • 期望 dp 例题 7 选
    期望概率\(dp\)例题。【例题1】期望分数\(link\)设在\(i\)的得分是\(x\),有\(x_i\)个连续的\(1.\)\[E(i)=p_i[(x_i+1)-x_i^3]+(1-p_i)E(0)+E(i-1)\]多项式乘法化简,最后得到\[E(i-1)+p_i[3x_i^2+3x_i+1]\]问题转移到\(E^2(x_i)\)以及\(E(x_i)\)\[E^2(x_i)=p_iE......
  • DP19 最长公共子序列(一)C
    建议直接网上看思路....#include<stdio.h>intmax(inti,intj){if(i>j)returni;returnj;}intmaxlength[1001][1001];intmain(){intn,m;while(scanf("%d%d",&n,&m)!=EOF){charc=getchar();//读取换行char......
  • TCP跟UDP区别
    TCP协议跟UDP协议都存在于传输层,都在程序之间传输数据。、 传输控制协议(TCP):TCP(传输控制协议)定义了两台计算机之间进行可靠的传输而交换的数据和确认信息的格式,以及计算机为了确保数据的正确到达而采取的措施。协议规定了TCP软件怎样识别给定计算机上的多个目的进程如何对分组重......