4 切割纸片

http://noi.openjudge.cn/——2.5基本算法之搜索——1805:碎纸机 阅读详情

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;
        }
    }

    // 如果是全带洞的纸片或完整的纸片,则返回0
    if (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数组为-1
    vector<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;
}
OpenJudge百炼-2803-碎纸机-C语言-递归 描述: 你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点: 1.每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。 2.碎纸机切出的每个纸片上都包括一个数。 3.要求切出的每个纸片上的数的和要不大于目标数而且与目标数最接近。 举一个例子,如下图,假设目标数是50,输入纸片上的数是12346。 阅读详情

相关推荐

openjudge_2.5基本算法之搜索_1805:碎纸机

openjudge_2.5基本算法之搜索_1805:碎纸机

adam_life的博客 570

动态规划之切割钢条

假设公司出售一段长度为i英寸的钢条的价格为Pi(i = 1, 2, ...单位:美元),下面给出了价格表样例: 长度i   1 2 3 4 5 6 7 8 9 10 价格Pi  1 5 8 9 10 17 17 20 24 30 切割钢条的问题是这样的:给定一段长度为n英寸的钢条和一个价格表Pi,求切割方案,使得销售收益Rn最大。 当然,如果长度为n英寸的钢条价格P

黑化肥发挥会挥发 6149

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 342

【OpenJudge 1805】碎纸机

提交 总时间限制: 1000ms 内存限制: 65536kB描述 你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点:1.每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。 2.碎纸机切出的每个纸片上都包括一个数。 3.要求切出的每个纸片上的数的和要不大于目标数而且与目标数最接近。举一个例子,如下

LOI_Sherlock 651

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3256

普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正

普通开普勒式望远镜光学设计1: 完成了望远镜的总体结构设计,确定其物镜与目镜的初始结构选型,使用Zemax软件完成望远镜的双胶合物镜的像差校正。

faust_cao的博客 1万+

关于激光切割机光路的几点

关于激光切割机光路的几点1.镜片旋钮2.光路的调整3.镜片 1.镜片旋钮 今天修机台时,想看一下光路中的镜片大小。但是那个压住镜片的盖子拧不开,需要工具。于是上某宝搜,还真的找到了。但价格比较高,大概五六十左右。后面突然看到了一个尖嘴钳,可以,就是你了。果然,拧开了。省钱了。 2.光路的调整 调整光路是有一定方法和步骤的。 主要方法是利用激光打穿纸片来看出光路的位置。 步骤如下: 1.先把功率调低,不会一下子把纸烧个大洞。不然都看不出是哪个点。 2.先调一反镜架,就是激光管对准的镜架。把光路对准镜架中心即可

XBadGuyX的博客 1304

qemu-system-aarch64参数详解与实战配置指南

本文详细解析了qemu-system-aarch64的核心参数,包括-machine、cpu、smp、m、drive和netdev等关键配置。通过嵌入式内核调试、完整系统运行和外设模拟三大实战场景,提供可直接使用的配置示例与性能优化技巧,帮助开发者在x86主机上高效构建和调试ARM64虚拟环境。

weixin_29197051的博客 351

动态规划之钢条切割

动态规划算法初识

一路前行的专栏 1276

Mathcad在LLC谐振变换器设计中的公式推导实战

本文通过Mathcad软件,详细演示了LLC谐振变换器设计的核心公式推导实战。文章阐述了如何利用Mathcad作为“会思考的草稿纸”,从定义基本参数、应用基波近似法(FHA)模型,到逐步推导电压增益公式及确定工作边界频率(fmin, fmax),并展示了如何通过动态参数扫描进行优化设计,帮助电源工程师高效、直观地完成理论计算,为后续仿真与实现奠定坚实基础。

q1w3e5r7t9y的博客 294

s8654

The official Snapdragon Ride SX 4.0 development board provides standardized hardware support for the secondary development and functional verification of the s8654 platform.

qq_39257814的博客 6826

碎纸机,详细注释

你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点: 1.每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。 2.碎纸机切出的每个纸片上都包括一个数。 3.要求切出的每个纸片上的数的和要不大于目标数而且与目标数最接近。 举一个例子,如下图,假设目标数是50,输入纸片上的数是12346。碎纸机会...

weixin_30699955的博客 103

增距镜或中继镜选型

增距镜光路图

camerall 5244

2020杭电多校第五场 1009 Paperfolding

1009 Paperfolding题意思路实现代码 链接 题意 将一张纸对折n次,每一次对折有四种选择,问最后从中心水平切一刀,垂直切一刀最后得到的纸片数有多少? 比如我n=0时,就是一张纸,从中心水平切一刀,垂直切一刀,得到4片。 n=1时,横着或竖着对折一下,再从中心水平切一刀,垂直切一刀,得到6片。 思路 先说结论 假设a是横着对折的次数,b是竖着对折的次数 则最终纸片数为 (2a+1)(2b+1)(2^{a}+1)(2^{b}+1)(2a+1)(2b+1) 我们以虚线代表折痕,实线代表切割, 相当于

离开那天的博客 767

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

如何用计算机拼接纸片,基于计算机处理的碎纸片拼接复原的研究.doc

基于计算机处理的碎纸片拼接复原的研究摘 要本文介绍了当A4张被碎纸机粉碎后,如何利用计算机进行碎纸片自动复原的过程。主要通过扫描将碎纸片的图片导入计算机,利用不同的方法,分别对中英文文字进行聚类分析,再针对中英文不同的文字特点,利用不同的方法进行拼接。取得了较为理想的效果,从而大大提高了边缘规则的碎纸片的拼接效率。【关键词】特征线模型 聚类分析 欧氏距离1 引言当今社会中,碎纸片的恢复具有一定的意...

weixin_30953869的博客 812

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

百练 2803:碎纸机

2803:碎纸机 总时间限制: 1000ms 内存限制: 65536kB 描述 你现在负责设计一种新式的碎纸机。一般的碎纸机会把纸切成小片,变得难以阅读。而你设计的新式的碎纸机有以下的特点: 1.每次切割之前,先要给定碎纸机一个目标数,而且在每张被送入碎纸机的纸片上也需要包含一个数。 2.碎纸机切出的每个纸片上都包括一个数。 3.要求切出的每个纸片上的数的和

u013412498的专栏 1877

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

codeforces解题总结:#693 (Div. 3)

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import

m0_55726560的博客 589

HDU 6822 Paperfolding 2020杭电多校第五场(数学推导)

原题题面 There is a piece of paper in rectangular shape with sufficient length and width (lay flat on the table). Execute an operation instruction according to a string of length n from left to right that only contains 4 different characters of L,R,U,DL,R,U,DL

因为一无所有,所以拥有无限可能。 546

矩形切割【C++算法题】

蓝桥杯填空题——矩形切割

码以报国的博客(m0_73287352) 339

贤鱼刷题日常 1805.碎纸机

贤鱼刷题日常 1805.碎纸机超简单题解

贤鱼的博客 350

Paperfolding(五,学习总结)

题意: 思路:

xiaotutuyahttp_的博客 725

多校第五场——1009 Paperfolding

Problem Description There is a piece of paper in rectangular shape with sufficient length and width (lay flat on the table). Execute an operation instruction according to a string of length n from left to right that only contains 4 different characters of

weixin_43330910的博客 199

蓝桥杯真题02矩形切割

蓝桥杯2019省赛02矩形切割 【问题描述】 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方 形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。 例如,对于一块两边分别为 5 和 3 的材料(记为 5×3),小明会依次切出 3×3、2×2、1×1、1×1 共 4 个正方形。 现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会 切出多少个正方形? #include<iostream

weixin_49865619的博客 408

hdu 3127 WHUgirls【dp】好题~

WHUgirls Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2796    Accepted Submission(s): 1046 Problem Description There are many pret

mengxiang000000 462

扫地机器人可以扫纸片_【IT之家众测作品】石头 T4 扫地机器人测评

1000+的石头T4扫地机器人能不能提高生活品质感?我试了几天。序言首先感谢IT之家能给我这次试用石头T4扫地机器人的机会,在此之前我对扫地机器人一直算是非常心水的一件智能电器,奈何之前提前购买了米家的无线吸尘器,一直也没坏,实在跟老婆找不到理由换扫地机器人,借着这次的试用机会,我想跟大家分享一下这几天的试用体验以及个人感受。开箱▲采用牛皮纸的包装拿到手后非常的大而且沉。▲打开包装,上方有零散配件...

weixin_39625987的博客 268
上一篇: 3 最优调度问题
下一篇: 5 字符串拼接
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Morgan Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值