1039:多边形三角剖分的最低得分
This commit is contained in:
parent
8728f6f11d
commit
e3696d1972
@ -0,0 +1,99 @@
|
|||||||
|
////你有一个凸的
|
||||||
|
// n 边形,其每个顶点都有一个整数值。给定一个整数数组
|
||||||
|
// values ,其中
|
||||||
|
// values[i] 是第 i 个顶点的值(即 顺时针顺序 )。
|
||||||
|
//
|
||||||
|
// 假设将多边形 剖分 为 n - 2 个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有 n - 2 个三角形的值之
|
||||||
|
//和。
|
||||||
|
//
|
||||||
|
// 返回 多边形进行三角剖分后可以得到的最低分 。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 1:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//输入:values = [1,2,3]
|
||||||
|
//输出:6
|
||||||
|
//解释:多边形已经三角化,唯一三角形的分数为 6。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 2:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//输入:values = [3,7,4,5]
|
||||||
|
//输出:144
|
||||||
|
//解释:有两种三角剖分,可能得分分别为:3*7*5 + 4*5*7 = 245,或 3*4*5 + 3*4*7 = 144。最低分数为 144。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 示例 3:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//输入:values = [1,3,1,4,1,5]
|
||||||
|
//输出:13
|
||||||
|
//解释:最低分数三角剖分的得分情况为 1*1*3 + 1*1*4 + 1*1*5 + 1*1*1 = 13。
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 提示:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// n == values.length
|
||||||
|
// 3 <= n <= 50
|
||||||
|
// 1 <= values[i] <= 100
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Related Topics 数组 动态规划 👍 191 👎 0
|
||||||
|
|
||||||
|
|
||||||
|
package leetcode.editor.cn;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
// 1039:多边形三角剖分的最低得分
|
||||||
|
public class MinimumScoreTriangulationOfPolygon {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Solution solution = new MinimumScoreTriangulationOfPolygon().new Solution();
|
||||||
|
}
|
||||||
|
|
||||||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
||||||
|
class Solution {
|
||||||
|
int[][] use;
|
||||||
|
|
||||||
|
public int minScoreTriangulation(int[] values) {
|
||||||
|
int n = values.length;
|
||||||
|
use = new int[n][n];
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
Arrays.fill(use[i], -1);
|
||||||
|
}
|
||||||
|
return dfs(0, n - 1, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int dfs(int start, int end, int[] values) {
|
||||||
|
if (start + 1 == end) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (use[start][end] > -1) {
|
||||||
|
return use[start][end];
|
||||||
|
}
|
||||||
|
int min = Integer.MAX_VALUE;
|
||||||
|
for (int i = start + 1; i < end; i++) {
|
||||||
|
min = Math.min(min,
|
||||||
|
dfs(start, i, values) + dfs(i, end, values)
|
||||||
|
+ values[start] * values[end] * values[i]);
|
||||||
|
}
|
||||||
|
use[start][end] = min;
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//leetcode submit region end(Prohibit modification and deletion)
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
<p>你有一个凸的
|
||||||
|
<meta charset="UTF-8" /> <code>n</code> 边形,其每个顶点都有一个整数值。给定一个整数数组
|
||||||
|
<meta charset="UTF-8" /> <code>values</code> ,其中
|
||||||
|
<meta charset="UTF-8" /> <code>values[i]</code> 是第 <code>i</code> 个顶点的值(即 <strong>顺时针顺序</strong> )。</p>
|
||||||
|
|
||||||
|
<p>假设将多边形 <strong>剖分</strong> 为 <code>n - 2</code> 个三角形。对于每个三角形,该三角形的值是顶点标记的<strong>乘积</strong>,三角剖分的分数是进行三角剖分后所有 <code>n - 2</code> 个三角形的值之和。</p>
|
||||||
|
|
||||||
|
<p>返回 <em>多边形进行三角剖分后可以得到的最低分</em> 。<br /> </p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p><strong>示例 1:</strong></p>
|
||||||
|
|
||||||
|
<p><img alt="" src="https://assets.leetcode.com/uploads/2021/02/25/shape1.jpg" /></p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<strong>输入:</strong>values = [1,2,3]
|
||||||
|
<strong>输出:</strong>6
|
||||||
|
<strong>解释:</strong>多边形已经三角化,唯一三角形的分数为 6。
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p><strong>示例 2:</strong></p>
|
||||||
|
|
||||||
|
<p><img alt="" src="https://assets.leetcode.com/uploads/2021/02/25/shape2.jpg" style="height: 163px; width: 446px;" /></p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<strong>输入:</strong>values = [3,7,4,5]
|
||||||
|
<strong>输出:</strong>144
|
||||||
|
<strong>解释:</strong>有两种三角剖分,可能得分分别为:3*7*5 + 4*5*7 = 245,或 3*4*5 + 3*4*7 = 144。最低分数为 144。
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p><strong>示例 3:</strong></p>
|
||||||
|
|
||||||
|
<p><img alt="" src="https://assets.leetcode.com/uploads/2021/02/25/shape3.jpg" /></p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<strong>输入:</strong>values = [1,3,1,4,1,5]
|
||||||
|
<strong>输出:</strong>13
|
||||||
|
<strong>解释:</strong>最低分数三角剖分的得分情况为 1*1*3 + 1*1*4 + 1*1*5 + 1*1*1 = 13。
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
|
||||||
|
<p><strong>提示:</strong></p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>n == values.length</code></li>
|
||||||
|
<li><code>3 <= n <= 50</code></li>
|
||||||
|
<li><code>1 <= values[i] <= 100</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div><div>Related Topics</div><div><li>数组</li><li>动态规划</li></div></div><br><div><li>👍 191</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user