豆包MarsCode算法题:最小周长巧克力板组合

问题描述

在这里插入图片描述


思路分析

这道题可以抽象为一个最优化问题:

问题分析

  • 每个正方形的面积为 ,对应的边长为 k ,周长为 4k
  • 给定整数 n ,我们需要找到若干正方形,使得它们的面积之和恰好等于 n
    在这里插入图片描述
    同时尽量最小化这些正方形的周长总和:
    在这里插入图片描述

解题方法

为了找到最优解,我们可以使用动态规划。

1. 动态规划的定义

dp[i] 表示面积为 i 时的最小周长。
最终答案即为 dp[n]

2. 状态转移方程

对于任意 i ,尝试使用边长为 k 的正方形:

  • 面积为 i 时,如果选择一个边长为 k 的正方形,其面积是 ,对应周长为 4k
  • 转移方程为:
    在这里插入图片描述
    其中 k 是满足 k² ≤ i 的所有正方形边长。

3. 初始条件

  • dp[0]=0:面积为 0 时,总周长为 0
  • 对于 i > 0,初始值设置为无穷大(表示尚未计算)。

4. 求解顺序

从小到大遍历面积 i ,对每个 i 再遍历所有可能的 k ,逐步计算出最优解。


参考代码(Java)

import java.util.Arrays;public class Main {public static int solution(int n) {// 动态规划数组,存储面积为 i 时的最小周长int[] dp = new int[n + 1];Arrays.fill(dp, Integer.MAX_VALUE); // 初始化为最大值dp[0] = 0; // 面积为 0 时周长为 0// 遍历每个面积for (int i = 1; i <= n; i++) {// 遍历所有可能的正方形边长 kfor (int k = 1; k * k <= i; k++) {dp[i] = Math.min(dp[i], dp[i - k * k] + 4 * k);}}return dp[n];}public static void main(String[] args) {System.out.println(solution(11) == 20); System.out.println(solution(13) == 20); System.out.println(solution(25) == 20); }
}

代码分析

1. 初始化部分

int[] dp = new int[n + 1];
Arrays.fill(dp, Integer.MAX_VALUE); // 初始化为最大值
dp[0] = 0; // 面积为 0 时周长为 0
  • dp[i] 的含义
    dp[i] 表示当总面积为 ( i ) 时,最小的周长和。

  • 初始化逻辑

    • 将所有 dp[i] 初始化为一个大值(Integer.MAX_VALUE),表示尚未计算过或者无效状态。
    • 特殊情况:dp[0] = 0,表示面积为 0 时,周长为 0(无需使用任何正方形)。

2. 外层循环:遍历面积

for (int i = 1; i <= n; i++) {
  • 目的
    从面积 1n ,依次计算每个面积的最小周长。

3. 内层循环:尝试不同正方形

for (int k = 1; k * k <= i; k++) {dp[i] = Math.min(dp[i], dp[i - k * k] + 4 * k);
}
  • 逻辑

    • k 是正方形的边长。
    • 是正方形的面积。
    • 4k 是正方形的周长。
  • 核心转移
    对于当前面积 i ,尝试所有可能的正方形面积 ,更新最优解:
    在这里插入图片描述

    • dp[i - k²] 表示面积减去 后的最优周长。
    • + 4k 是新增正方形的周长。
  • 条件 k * k <= i
    仅考虑 ( k ) 的平方不超过当前面积 ( i ),否则超出范围。

4. 返回结果

return dp[n];
  • 最终,返回 dp[n],即面积为 n 的最小周长和。

复杂度分析

时间复杂度

  • 总时间复杂度为:O(n√n)

空间复杂度

  • 仅使用一个大小为 n+1 的数组 dp,空间复杂度为 O(n)

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

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

相关文章

解析与修复vcruntime140_1.dll问题,总结四种vcruntime140_1.dll解决方法

在使用Windows系统的过程中&#xff0c;不少用户可能会遇到与vcruntime140_1.dll相关的问题。这个看似神秘的文件&#xff0c;其实在很多软件的运行中扮演着至关重要的角色。今天的这篇文章将教大家四种vcruntime140_1.dll解决方法。 一、vcruntime140_1.dll文件分析 &#xf…

WebGL进阶(九)光线

理论基础&#xff1a; 点光源 符合向量定义&#xff0c;末减初。 平行光 环境光 效果&#xff1a; 点光源 平行光 环境光 源码&#xff1a; 点光源 平行光 环境光 复盘&#xff1a;

【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB

Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务&#xff0c;专为高性能和可扩展性设计&#xff0c;特别适合需要快速响应和高吞吐量的应用场景&#xff0c;如移动应用、游戏、物联网和实时分析等。 工作原理 Amazon DynamoDB 在任何规模下响应时间一律达毫秒级&#xff…

【AIGC】ChatGPT提示词Prompt解析:拒绝的艺术:如何优雅地说“不“

引言 在人际交往的复杂网络中,学会优雅地拒绝是一种至关重要的社交智慧。很多人往往因为害怕伤害他人的感受,而选择敷衍、拖延或不置可否。 然而,真正的智慧在于如何用尊重和同理心传达"不"的信息。 本文将深入探讨优雅拒绝的艺术,帮助你在维护自身边界的同时,…

Java项目实战II基于微信小程序的农场驿站平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互…

SpringBoot(三十三)SpringBoot集成Spring boot actuator程序监控器

Springboot集成actuator还是比较简单的。 但是,我们需要先了解一下什么是actuactor呢? 如标题所示,actuator是程序监控器。 提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。 这个模块是一个采集应用内部信息暴露给…

各类主流MQ使用场景对比说明

先上对比纲要&#xff0c;各MQ的详细说明可以继续看后面的文章 1. Apache Kafka 优势&#xff1a; 高吞吐量和低延迟。支持分布式架构&#xff0c;具有很好的伸缩性。容错性强&#xff0c;即使单个节点失败也不会影响整体服务。 劣势&#xff1a; 复杂度较高&#xff0c;配…

KMP算法(java)next数组和next函数修正值

BF算法 最简单直观的模式匹配算法是BF(Brute-Force)算法。 模式匹配不一定是从主串的第一个位置开始&#xff0c;可以指定主串中查找的起始位置pos。如果采用字符串顺序存储结构&#xff0c;可以写出不依赖于其他串操作的匹配算法。 最坏情况下的平均时间复杂度是O(nxm)。 …

matlab基础例题

1. MATLAB 命令窗口中可用____命令清除工作区中的变量&#xff1b;用____命令清除命令窗口中的内容。 2. MATLAB 中的运算包括________________。 3. MATLAB 中的 M 文件有_____________。 4. MATLAB 中的程序控制结构包括___________. 5.已知矩阵 A [1 2 3;4 5 6;7 8 9],A…

支付宝租赁小程序的优势与应用前景分析

内容概要 在这个快节奏的时代&#xff0c;租赁服务越来越成为大家生活中的一部分。而支付宝租赁小程序正是这个大潮流中的一颗璀璨明珠。通过简单易用的界面和强大的功能&#xff0c;这个小程序不仅让用户在租赁过程中获得了前所未有的便利&#xff0c;也为商家提供了新的商业…

Elasticsearch 中的热点以及如何使用 AutoOps 解决它们

作者&#xff1a;来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制&#xff0c;比如吵闹的邻居&#xff0c;有些我们控制得较差&#xff0c;比如 Elasticsearch 中的分片分…

【H2O2|全栈】JS进阶知识(七)ES6(3)

目录 前言 开篇语 准备工作 递归 概念 形式 优缺点 案例 数组求和 斐波那契数列 递归查找数据 柯里化 概念 形式 什么时候使用柯里化&#xff1f; 多维数组扁平化 多维数组 扁平化 利用flat() 与字符串相互转化 与JSON字符串相互转化 some()&#xff0c;…

字符数组和字符指针

为什么C程序里面不能对字符数组进行重新赋值而可以在控制台进行输入赋值&#xff1f; 在C语言中&#xff0c;字符数组&#xff08;char array&#xff09;和字符指针&#xff08;char pointer&#xff09;是两种不同的数据类型&#xff0c;它们在内存中的存储方式和使用方式有…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…

迷宫题解 题目ID:8015

题目描述 时间限制&#xff1a; 1s 空间限制&#xff1a;32M 题目描述&#xff1a; 给定一个N∗M 方格的迷宫&#xff0c;每个方格最多经过一次&#xff0c;且迷宫里有 T 处障碍&#xff0c;障碍处不可通过。 在迷宫中有上下左右四种移动方式&#xff0c;每次只能移动一个方…

Kafka Stream实战教程

Kafka Stream实战教程 1. Kafka Streams 基础入门 1.1 什么是 Kafka Streams Kafka Streams 是 Kafka 生态中用于 处理实时流数据 的一款轻量级流处理库。它利用 Kafka 作为数据来源和数据输出&#xff0c;可以让开发者轻松地对实时数据进行处理&#xff0c;比如计数、聚合、…

Python中常用的内置函数介绍

1、生成器&#xff08;Generator&#xff09;&#xff1a; 通过列表生成式&#xff0c;我们可以直接创建一个列表。但是&#xff0c;受到内存限制&#xff0c;列表容量肯定是有限的。而且&#xff0c;创建一个包含100万个元素的列表&#xff0c;不仅占用很大的存储空间&#x…

基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型

本系统是基于Python Django框架构建的“Boss直聘”数据采集与分析预测系统&#xff0c;旨在通过技能匹配的方式对招聘信息进行分析与预测&#xff0c;帮助求职者根据自身技能找到最合适的职位&#xff0c;同时为招聘方提供更精准的候选人推荐。系统的核心预测模型基于职位需求技…

vulhub之fastjson

fastjson 1.2.24 反序列化 RCE 漏洞(CVE-2017-18349) 漏洞简介 什么是json json全称是JavaScript object notation。即JavaScript对象标记法,使用键值对进行信息的存储。举个简单的例子如下: {"name":"BossFrank", "age":23, "isDevel…

Scala案例:全文单词统计

2.txt内容如下 Thank you very much.Well I want to thank you all very much this is great, these are our friends, we have thousands of friends in this incredible movement.This was a movement like no nobodys ever seen before, and frankly this was I believe the…