「区间DP-步入」凸多边形的划分

news2024/12/23 5:51:38

凸多边形的划分

题目描述

给定一个具有N个顶点的凸多边形,将顶点从1至N标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成N-2个互不相交的三角形,试求这些三角形顶点的权值乘积和至少为多少。

输入描述

输入第一行为顶点数N第二行依次为顶点1至顶点N的权值。

输出描述

输出仅一行,为这些三角形顶点的权值乘积和的最小值。

样例

5
121 122 123 245 231
12214884

说明

  • 对于100% 的数据,有 N ≤ 50 N \leq 50 N50 ,每个点权值小于 1 0 9 10^9 109
  • https://ac.nowcoder.com/acm/problem/50500

解析

1643528400834

按照以往的套路,题目要求说明,我们就做什么假设,假设 [ i , j ] [i,j] [i,j] 为最小划分三角形。

以 BE ( [ 2 , 5 ] [2,5] [2,5])为例,以 BE 为固定边做辅助线,可作出 BD 或 EC,分别可以划分三角形为 EBD 与 BDC 或 BEC 和 CED,其中划分的点 D 与 C 称为分界点 K。

可得方程:
d p [ i ] [ j ] = m i n ( d p [ i ] [ j ] , d p [ i ] [ k ] + d p [ k ] [ j ] + A [ i ] ∗ A [ j ] ∗ A [ k ] ) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + A[i] * A[j] * A[k]) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+A[i]A[j]A[k])
初始化:

  • d p [ i ] [ j ] = I N F dp[i][j] = INF dp[i][j]=INF

代码

以下代码只能获得 40 分(方便理解DP过程)

public class Main {
    static final int INF = 1 << 30;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] A = new int[n+1];
        long[][] dp = new long[n+1][n+1];
        for(int i = 1; i <= n; i++) A[i] = sc.nextInt();
        for(int len = 3; len <= n; len++) {
            for(int i = 1; i + len - 1 <= n; i++) {
                int j = i + len - 1;
                dp[i][j] = INF;
                for(int k = i + 1; k < j; k++) {
                    dp[i][j] = Math.min(dp[i][j], dp[i][k] + dp[k][j] + (A[i] * A[j] * A[k]));
                }
            }
        }
        System.out.println(dp[1][n]);
    }
}

AC 代码

public class Main {
    static BigInteger INF = new BigInteger("1000000000000000000000000000");
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        BigInteger[] A = new BigInteger[n+1];
        BigInteger[][] dp = new BigInteger[n+1][n+1];
        
        for(int i = 1; i <= n; i++) Arrays.fill(dp[i], new BigInteger("0"));
        for(int i = 1; i <= n; i++) A[i] = new BigInteger(sc.nextInt() + "");
        
        for(int len = 3; len <= n; len++) { // 枚举区间
            for(int i = 1; i + len - 1 <= n; i++) { // 枚举区间起点
                int j = i + len - 1; // 计算区间终点
                dp[i][j] = INF;
                for(int k = i + 1; k < j; k++) { // 枚举分界点
                    BigInteger a = dp[i][j];
                    BigInteger t = new BigInteger("0");
                    if(dp[i][k] != null) t = t.add(dp[i][k]);
                    if(dp[k][j] != null) t = t.add(dp[k][j]);
                    if(A[i] != null && A[j] != null && A[k] != null) t = t.add(A[i].multiply(A[j]).multiply(A[k]));
                    if(a.compareTo(t) >= 1) dp[i][j] = t;
                }
            }
        }
        
        System.out.println(dp[1][n]);
    }
}

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

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

相关文章

云智慧陆兴海:统一运维体系为数字政府建设保驾护航

2023年4月6日至7日&#xff0c;由长春市人民政府、吉林省政务服务和数字化建设管理局主办的《2023长春数字经济发展论坛》在长春隆重举行。 本次论坛旨在探讨数字经济的理论创新、实践探索和发展路径&#xff0c;推动长春市乃至吉林省的数字化转型和高质量发展。第十二届全国政…

无源滤波器为什么能滤波?

滤波器能够滤波的本质是利用构造特定的阻抗特性引起反射和损耗来实现对频率的选择。 如果从能量守恒的角度来讲&#xff0c;被抑制掉的信号去哪里了&#xff1f;​ 我们先看一下基本电路原理&#xff0c;上图中&#xff0c;负载接收的功率为 我们知道&#xff0c;最大功率传输…

ChatGPT: 从GPT-3.5到GPT-4,探索语言模型的演进之路

ChatGPT: 从GPT-3.5到GPT-4&#xff0c;探索语言模型的演进之路 引言 人工智能语言模型的演进 随着人工智能的快速发展&#xff0c;语言模型作为自然语言处理领域的一项重要技术也在不断演进。从最初的基于规则的系统&#xff0c;到基于统计的模型&#xff0c;再到近年来的深度…

【Scala入门】scala基础语法:to和until,if-else和for循环,while循环

目录&#xff1a; 【Scala入门】Scala下载及安装&#xff08;Windows&#xff09;以及Idea创建第一个scala项目_水w的博客-CSDN博客 【Scala入门】scala基础语法&#xff1a;类和对象&#xff0c;变量和常量_水w的博客-CSDN博客 目录 2.4 数据类型 2.5 to和until&#xff0c;…

破防了,这才是机房运维的高效方法

在云计算、5G等新业务野蛮生长的催化下&#xff0c;机房规模与容量也呈倍速扩张。机房安全是业务发展的底座。提升机房设备安全和管理效率&#xff0c;避免人为因素导致的事故发生&#xff0c;是机房运维的必要前提。 安全生产重于泰山&#xff0c;除了日常的科学防护&#xf…

C++函数适配器和函数包装器:让你的函数更灵活

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

机器学习——K-Means算法优化(一)代价函数

机器学习——K-Means算法优化&#xff08;一&#xff09;代价函数 文章目录 机器学习——K-Means算法优化&#xff08;一&#xff09;代价函数一、K-Means算法&#xff08;代价函数&#xff09;二、代码部分 在K-Means算法中&#xff0c;对K个质心的选择&#xff0c;容易陷入局…

Java基础之字节流

文章目录 一、字节输入流1.1 字节输入流读取单个字节1.2 字节输入流一个字节一个字节读取数据1.3 字节输入流一个字节数组一个字节数组读取数据 二、字节输入流读出数据乱码问题三、字节输出流3.1 一次向指定文本写入一个字节数据3.2 一次向指定文本写入一个字节数组数据3.3 一…

CentOS7---基于 CentOS 7 构建 LVS-DR 群集

一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 NAT模式(地址转换) 原理&#xff1a;就是把客户端发来的数据包的IP头的目的地址&#xff0c;在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理&#xff0c;RS处理完后把数据交给负载均衡器…

LeetCode热题HOT100:单词拆分、环形链表 II、LRU 缓存

LeetCode热题HOT100 139. 单词拆分 题目&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xf…

[前端基础]Node.js简单操作,手把手教你搭建一个轻量级应答服务器(会继续补充操作细节,欢迎讨论)

注意:前置知识:回调函数,异步,ajax技术,端口 目录 1.什么是node.js 2.模块的概念 3. 回调函数 4.关于文件的管理 5.关于流的操作 6.关于构建服务器:前端部分,如何向后端发送请求 7.后端创建简单的服务器对象 8.后端如何处理请求 9.前端如何处理返回的数据 10.简易应答…

STL标准模板库 vector容器与迭代器入门

STL五大件 标准模板库vector容器&#xff1a;vector 声明初始化vector 容器 &#xff1a;push_backvector 容器 &#xff1a;push_back的问题vector容器&#xff1a;push_back的问题&#xff0c;reserve解决 vector容器&#xff1a;insert函数vector容器&#xff1a;insert函数…

【从零开始玩量化17】如何python+QMT完成自动化交易?(全网最详细入门教程)

一、什么是QMT 此部分为扫盲内容&#xff0c;有一定了解者可以跳过。 概念 它是一款量化交易客户端软件&#xff0c;由一家叫做迅投公司出品&#xff0c;可以直接登录你的券商账号进行股票交易&#xff0c;但与同花顺/通信达不同的是&#xff0c;它暴露了基于python的交易API&…

【人生苦短,我学 Python】进阶篇——异常处理(Day16)

写在前面&#xff1a;大家好&#xff01;我是【AI 菌】。我热爱AI、热爱分享、热爱开源&#xff01; 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C 感兴趣&#xff0c;可以关注我的动态&#xff0c;我们一起学习&#xff0c;一起进步~ 我…

Python小姿势 - 可选知识点:

可选知识点&#xff1a; 列表推导式 列表和字典推导式 字典推导式 生成器表达式 带条件的生成器表达式 解析XML 解析JSON 使用Requests和BeautifulSoup爬虫 Python并发编程 Python多线程编程 Python多进程编程 Python异步编程 Python装饰器 Python闭包 Python模块化 Python类和…

PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电

​ PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电 物联网与工业自动化控制系统的联系 当今&#xff0c;物联网可谓是在各大媒体出镜率最高、而且与“智能”联系密切的名词之一。从“管理、控制、智能”的角度来看&#xff0c;其实物联网与工业自动化是一脉相承的…

Kafka技术基础

Apache Kafka发源于LinkedIn&#xff0c;于2011年成为Apache的孵化项目&#xff0c;随后于2012年成为Apache的主要项目之一&#xff0c;是消息队列的一种实现方式&#xff0c;提供消息的持久化。Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容…

IEEE-TMI:张孝勇团队开发小鼠精细脑结构自动分割的深度学习算法

近日&#xff0c;复旦大学类脑智能科学与技术研究院青年研究员张孝勇课题组联合德国亥姆霍兹慕尼黑研究中心&#xff0c;在医学图像处理领域顶尖期刊《IEEE医学影像汇刊》(IEEE Transactions on Medical Imaging&#xff0c;TMI) 发表了题为《MouseGAN&#xff1a;用于小鼠大脑…

OpenCV 模板匹配 matchTemplate

一、模板匹配概念 模板匹配是一项在一副图像中寻找与另一幅模板图像最匹配&#xff08;相似&#xff09;部分的技术。模板匹配不是基于直方图的&#xff0c;而是通过在输入图像上滑动图像块&#xff08;模板&#xff09;同时对比相似度&#xff0c;来对模板和输入图像进行匹配的…

【IoT】如何使用软件加密(文件夹加密工具.exe),并破解工具

目录 第一步&#xff1a;显示隐藏的文件。 第二步&#xff1a;将隐藏文件变成文件夹。 第三步&#xff1a;解密文件。 有时候出差或者有些商务场合&#xff0c;需要对一些敏感文件做一下简单的加密&#xff0c;这样在分享内容的时候&#xff0c;可以起到初步的保护作用。 当…