同机房大佬也写了这道题的 题解.

我在另一篇 题解 中提到了这类问题的通解,接下来我们依照此通解思考该题.

问题处理

首先我们来定义三角形的表示方式. 定义 \(f[i][j]\) 表示三角形 \((i,j)\) 的最大边长,其中三角形 \((i,j)\) 为垂直顶点坐标为 \((i,j)\) 的三角形. (垂直顶点指正下方顶点或正下方顶点)

进行初始化:使所有完好的蛋糕块所在坐标的最大边长都为 \(1\) .

然后进行状态转移方程的推理:

为了坐标便于表示,我们先把蛋糕左对齐,如图.

101100001
0000010
00010
010
0
101100001
0000010
00010
010
0

再放一个比较直观的图:

对应着来看,我们发现,正三角和倒三角的处理方式是不同的,所以我们一个一个解决.

先来看倒三角,也就是它的顶点在最上方. 我们发现,要想使边长从 \(1\) 变为 \(2\) ,需要这个三角形的正上方,左上方,右上方都是完好的. 左对齐来看,需要完好的就是正上方,右上方和更右边的一个.

注意到这个图中有一个边长为 \(3\) 的倒三角形,那么我们如何从 \(2\) 变为 \(3\) 呢? 依照刚才的思路,我们发现只需要保证此三角形和它上方的三角形完好,并且它左上方,右上方的三角形的最大边长都为 \(2\) . 也就是下图这样.

标蓝的为最大长度为 \(2\) 的三角形,标红的为需要完好的三角形.

发现一定理:假如一个三角形和它上方的三角形都完好,且左上方,右上方的三角形均不大于 \(n\),那么这个三角形的最大边长为\(n+1\).

由此,对应左对齐坐标,推出状态转移方程:

\[f[i][j] = min\begin{cases} f[i-1][j]\\f[i-1][j+2]) \end{cases}+1
\]

同理,正三角的状态转移方程为:

\[f[i][j] = min\begin{cases} f[i+1][j]\\f[i+1][j-2]) \end{cases}+1
\]

找出最大值即可

另外. 如何判断一个三角形是正三角还是倒三角呢? 其实也很简单:顶点是正三角的三角形就是正三角. 而我们左对齐的意义就出现了:可以发现,奇数列的顶点全是倒三角,偶数列的顶点全是正三角,所以遍历的时候直接遍历所有奇数列或偶数列即可.

细节处理

注意到:第一行的顶点无法构成倒三角,最后一行的顶点无法构成正三角,第二列的顶点无法构成正三角. 遍历的时候直接跳过即可.

代码实现

点击查看代码
	cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=(n-i)*2+1;++j){
scanf("%1d",&f1[i][j]);
f2[i][j]=f1[i][j]=!f1[i][j];
}
}
for(int k=1;k<=2;++k){
for(int i=2;i<=n;++i){
for(int j=1;j<=(n-i)*2+1;j+=2){
if(f1[i][j]&&f1[i-1][j+1]){
f1[i][j]=min(f1[i-1][j],f1[i-1][j+2])+1;
ans=max(ans,f1[i][j]);
}
}
}
for(int i=1;i<=n-1;++i){
for(int j=4;j<=(n-i)*2+1;j+=2){
if(f2[i][j]&&f2[i+1][j-1]){
f2[i][j]=min(f2[i+1][j],f2[i+1][j-2])+1;
ans=max(ans,f2[i][j]);
}
}
}
}
cout<<ans*ans;

[TK] 三角蛋糕 hzoi-tg#261的更多相关文章

  1. 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯

    高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk  539. 牛棚的灯 ★★☆   ...

  2. 使用mybatis-generator插件结合tk.mybatis自动生成mapper

    本篇文章将介绍使用spring boot框架,引入mybatis-generator插件,结合tk.mybatis自动生成Mapper和Entity的一整套流程,其中包括最重要的踩坑与填坑.     ...

  3. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  4. Guass列选主元消去法和三角分解法

    最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下: 1.Guass列选主元消去法对于AX =B 1).消元过程:将(A|B)进行变换为,其中是上三角矩阵.即: k从1到n-1 ...

  5. import matplolib 时出现"This probably means that tk wasn't installed properly."的解决方法

    最近又添了一台新电脑,配置好各个依赖环境后想用matplotlib画个图,结果报出下面的错误 根据报错分析,应该是C:/Python27/tcl/tk8.5/tk.tcl这个文件出问题了,根据图中的信 ...

  6. 如何把select默认的小三角替换成自己的图片

    不同的浏览器默认的select的选项图标是不同的,例如: 在chrome中,是这样的: 未点击时    点击时  在Firefox中是这样的: 未点击时  点击时   在IE9中是这样的: 未点击时  ...

  7. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  8. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  9. CSS实现小三角小技巧

    <style> .box{ width: 20px; height: 20px; background-color: #424; border: 10px solid #9C27B0; b ...

  10. 输出 n=6 的三角数字阵(JAVA基础回顾)

    package itcast.feng; import java.util.Scanner; //需求:输出 n=6 的三角数字阵 //1 //2 3 //4 5 6 //7 8 9 10 //11 ...

随机推荐

  1. C# 对象复制三种方法效率对比——反射、序列化、表达式树

    1.需求 在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍. 比如: public class Student { public int Id { get; set; } publi ...

  2. .Net4.5及.Net Core2.1下的HttpClient使用详解

    一.HTTP系列演进 方式 说明 HttpWebRequest .NET早期版本,同步方式 WebClient HttpWebRequest的封装简化版,同步方式 HttpClient .NET4.5 ...

  3. Java 基于Hutool实现DES加解密

    POM.XML配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. Python 标准类库-因特网数据处理之Base64数据编码

    该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能.它为RFC 3548中指定的编码提供编码和解码功能.定义了Base16.Base32和Base64算法,以及事实上的 ...

  5. .NET TCP、UDP、Socket、WebSocket

    做.NET应用开发肯定会用到网络通信,而进程间通信是客户端开发使用频率较高的场景. 进程间通信方式主要有命名管道.消息队列.共享内存.Socket通信,个人使用最多的是Sokcet相关. 而Socke ...

  6. php8.3开启jit技术

    查看是否开启:$jitEnabled = ini_get('jit.enabled'); echo "JIT Enabled: " . ($jitEnabled == '1' ? ...

  7. 认识netty的基本组件

    Java NIO VS Netty 有了 Java NIO,而且 Netty 也是基于 Java NIO 实现,那么为什么不能直接用 Java NIO 来实现网络通信模块呢? 接下来我就给大家解释一下 ...

  8. 2、SpringMVC之入门案例

    2.1.环境搭建 2.1.1.右击project创建新module 2.1.2.选择maven 2.1.3.设置module名称和路径 2.1.4.module初始状态 2.1.5.配置打包方式 注意 ...

  9. 【转载】人工智能CAE仿真分析技术

    原文: https://cloud.tencent.com/developer/news/628731 AI与CAE相结合 CAE的本质是对复杂工程问题通过合理简化建立数学模型,并根据输入求得输出.深 ...

  10. pytorch 第三方模块 GraphNAS 安装成功记录

    实验室的小师妹要安装pytorch的第三方模块,经过多方努力没有安装上,后来我接手后也是感觉头疼. 该模块地址:   https://github.com/GraphNAS/GraphNAS 该模块主 ...