4 切割纸片

4 切割纸片

作者: 赵晓鹏时间限制: 1S章节: 动态规划与贪心

---------------------------------输入

6 4
1 1 0 1
0 0 0 1
0 0 0 1
0 0 0 1
0 0 1 1
0 0 1 1

--------------------输出结果

4
 

#include <iostream>
#include <vector>
#include <climits>using namespace std;int minCut(vector<vector<int>>& paper, int startRow, int endRow, int startCol, int endCol, vector<vector<vector<vector<int>>>>& dp) {// 如果已经计算过该区域的最小切割数,直接返回结果if (dp[startRow][endRow][startCol][endCol] != -1) {return dp[startRow][endRow][startCol][endCol];}// 检查当前区域是否是全带洞的纸片或完整的纸片bool allHoles = true;bool allIntact = true;for (int i = startRow; i < endRow; i++) {for (int j = startCol; j < endCol; j++) {if (paper[i][j] == 1) {allIntact = false;}else {allHoles = false;}if (!allHoles && !allIntact) {break;}}if (!allHoles && !allIntact) {break;}}// 如果是全带洞的纸片或完整的纸片,则返回0if (allHoles || allIntact) {dp[startRow][endRow][startCol][endCol] = 0;return 0;}int minCuts = INT_MAX;// 水平切割for (int i = startRow + 1; i < endRow; i++) {int cuts = minCut(paper, startRow, i, startCol, endCol, dp) + minCut(paper, i, endRow, startCol, endCol, dp) + 1;minCuts = min(minCuts, cuts);}// 垂直切割for (int j = startCol + 1; j < endCol; j++) {int cuts = minCut(paper, startRow, endRow, startCol, j, dp) + minCut(paper, startRow, endRow, j, endCol, dp) + 1;minCuts = min(minCuts, cuts);}dp[startRow][endRow][startCol][endCol] = minCuts;return minCuts;
}int main() {int m, n;cin >> m >> n;vector<vector<int>> paper(m, vector<int>(n));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> paper[i][j];}}// 初始化dp数组为-1vector<vector<vector<vector<int>>>> dp(m, vector<vector<vector<int>>>(m + 1, vector<vector<int>>(n, vector<int>(n + 1, -1))));int minCuts = minCut(paper, 0, m, 0, n, dp);cout << minCuts << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/17704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 类概念简介

Java 是一种面向对象编程语言&#xff08;POO&#xff09;&#xff0c;它代表了封装、继承和多态性等概念。面向对象编程的功能是经典的&#xff0c;也是Java 对象创建的基础元素。在这篇文章中&#xff0c;我们讨论了 Java 中的类资源管理器&#xff0c;对创建者进行了评论&am…

TCP 协议(三)十种核心机制

1.确认应答&#xff08;可靠机制&#xff09; 2.超时重传&#xff08;可靠机制&#xff09; 3.连接管理&#xff08;可靠机制&#xff09; 4.滑动窗口&#xff08;效率机制&#xff09; 5.流量控制&#xff08;效率机制&#xff09; 6.拥塞控制&#xff08;效率机制&#xff09…

1 怎样用plsql developer导表数据

一 导少量表的情形 1.1 导出 点击‘工具’-‘导出表’&#xff1a; 选择要导出的用户和表&#xff0c;在’PL/SQL Developer’那里指定‘输出文件’&#xff0c;点击‘导出’按钮开始导出&#xff1a; 导出完毕后&#xff0c;最下方会提示‘正在导出表… 完成’。 --如果只想…

【Redis】2、Redis应用之【根据 Session 和 Redis 进行登录校验和发送短信验证码】

目录 一、基于 Session 实现登录(1) 发送短信验证码① 手机号格式后端校验② 生成短信验证码 (2) 短信验证码登录、注册(3) 登录验证① 通过 SpringMVC 定义拦截器② ThreadLocal (4) 集群 Session 不共享问题 二、基于 Redis 实现共享 session 登录(1) 登录之后&#xff0c;缓…

java版电子招标采购系统源码之电子招标采购实践与展望-招标采购管理系统

统一供应商门户 便捷动态、呈现丰富 供应商门户具备内外协同的能力&#xff0c;为外部供应商集中推送展示与其相关的所有采购业务信息&#xff08;历史合作、考察整改&#xff0c;绩效评价等&#xff09;&#xff0c;支持供应商信息的自助维护&#xff0c;实时风险自动提示。…

Prometheus - Concept

一 Prometheus 是什么 Prometheus 是一个开源的 监控和报警系统 。该系统内置和基于时间序列地抓取、存储、查询、绘图数据、报警。 现在是一个开源项目&#xff0c;继 K8S 后的第二个云原生计算基金会的托管项目&#xff0c;可见其火爆程度。 二 Prometheus 的特征 Promet…

Mysql (insert,update操作)

1.创建表&#xff1a; 创建员工表employee&#xff0c;字段如下&#xff1a; id&#xff08;员工编号&#xff09;&#xff0c;name&#xff08;员工名字&#xff09;&#xff0c;gender&#xff08;员工性别&#xff09;&#xff0c;salary&#xff08;员工薪资&#xff09; …

【网络编程】应用层协议——HTTP协议

文章目录 一、HTTP协议基本认识二、URL的认识2.1 urlencode和urldecode 三、HTTP协议格式3.1 HTTP请求与响应格式3.2 如何保证请求和响应被应用层完整读取&#xff1f;3.3 请求和响应如何做到序列化和反序列化&#xff1f;3.4 代码验证请求格式3.5 代码验证响应格式3.5.1 telne…

OpenGl纹理贴图

给图形赋予颜色时&#xff0c;采用纹理贴图的方式。 每个顶点关联一个纹理坐标(Texture Coordinate),然后在图形的其他片段上进行片段插值(Fragment Interpolation) 顶点坐标如下&#xff1a; float vertices[] { // positions // colors // texture coords 0.2f, 0.2f, 0.0f,…

创造一款安卓自定义控件_裁剪原理介绍

1、新增功能&#xff0c;旋转&#xff1a; 效果如图&#xff0c;点击旋转&#xff0c;可以将控件画面本身进行90度倍数的旋转&#xff0c;并进行宽高比例适配&#xff0c;旋转之后裁剪依然正常。 功能实现原理&#xff1a; 1、通过调用view的setRotation功能进行以View为中心…

Docker 中的 .NET 异常了怎么抓 Dump (转载)

一、背景 1. 讲故事 有很多朋友跟我说&#xff0c;在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高&#xff0c;内存暴涨 等各种Dump&#xff0c;为什么你没有写在 Docker 中如何抓的相关文章呢&#xff1f;瞧不上吗&#xff1f; 哈哈&#xff0c;在DUMP的分析旅程中&a…

[MySQL]MySQL库的操作

[MySQL]MySQL库的操作 文章目录 [MySQL]MySQL库的操作1. 创建数据库2. 字符集和校验规则2.1. 基本概念2.2. 查看系统默认字符集以及校验规则2.3. 查看数据库支持的字符集2.4 查看数据库支持的校验规则2.5 指明字符集和校验规则创建数据库2.6 校验规则对数据库的影响 3. 删除数据…