Skip to content

Commit 2f7f9bb

Browse files
committed
feat: add solutions to lc problem: No.1039
No.1039.Minimum Score Triangulation of Polygon
1 parent 7fe312a commit 2f7f9bb

File tree

3 files changed

+163
-0
lines changed

3 files changed

+163
-0
lines changed

solution/1000-1099/1039.Minimum Score Triangulation of Polygon/README.md

+72
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,78 @@ func min(a, b int) int {
367367
}
368368
```
369369

370+
### **TypeScript**
371+
372+
```ts
373+
function minScoreTriangulation(values: number[]): number {
374+
const n = values.length;
375+
const f: number[][] = Array.from({ length: n }, () =>
376+
Array.from({ length: n }, () => 0),
377+
);
378+
const dfs = (i: number, j: number): number => {
379+
if (i + 1 === j) {
380+
return 0;
381+
}
382+
if (f[i][j] > 0) {
383+
return f[i][j];
384+
}
385+
let ans = 1 << 30;
386+
for (let k = i + 1; k < j; ++k) {
387+
ans = Math.min(
388+
ans,
389+
dfs(i, k) + dfs(k, j) + values[i] * values[k] * values[j],
390+
);
391+
}
392+
f[i][j] = ans;
393+
return ans;
394+
};
395+
return dfs(0, n - 1);
396+
}
397+
```
398+
399+
```ts
400+
function minScoreTriangulation(values: number[]): number {
401+
const n = values.length;
402+
const f: number[][] = Array.from({ length: n }, () =>
403+
Array.from({ length: n }, () => 0),
404+
);
405+
for (let i = n - 3; i >= 0; --i) {
406+
for (let j = i + 2; j < n; ++j) {
407+
f[i][j] = 1 << 30;
408+
for (let k = i + 1; k < j; ++k) {
409+
f[i][j] = Math.min(
410+
f[i][j],
411+
f[i][k] + f[k][j] + values[i] * values[k] * values[j],
412+
);
413+
}
414+
}
415+
}
416+
return f[0][n - 1];
417+
}
418+
```
419+
420+
```ts
421+
function minScoreTriangulation(values: number[]): number {
422+
const n = values.length;
423+
const f: number[][] = Array.from({ length: n }, () =>
424+
Array.from({ length: n }, () => 0),
425+
);
426+
for (let l = 3; l <= n; ++l) {
427+
for (let i = 0; i + l - 1 < n; ++i) {
428+
const j = i + l - 1;
429+
f[i][j] = 1 << 30;
430+
for (let k = i + 1; k < j; ++k) {
431+
f[i][j] = Math.min(
432+
f[i][j],
433+
f[i][k] + f[k][j] + values[i] * values[k] * values[j],
434+
);
435+
}
436+
}
437+
}
438+
return f[0][n - 1];
439+
}
440+
```
441+
370442
### **...**
371443

372444
```

solution/1000-1099/1039.Minimum Score Triangulation of Polygon/README_EN.md

+72
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,78 @@ func min(a, b int) int {
301301
}
302302
```
303303

304+
### **TypeScript**
305+
306+
```ts
307+
function minScoreTriangulation(values: number[]): number {
308+
const n = values.length;
309+
const f: number[][] = Array.from({ length: n }, () =>
310+
Array.from({ length: n }, () => 0),
311+
);
312+
const dfs = (i: number, j: number): number => {
313+
if (i + 1 === j) {
314+
return 0;
315+
}
316+
if (f[i][j] > 0) {
317+
return f[i][j];
318+
}
319+
let ans = 1 << 30;
320+
for (let k = i + 1; k < j; ++k) {
321+
ans = Math.min(
322+
ans,
323+
dfs(i, k) + dfs(k, j) + values[i] * values[k] * values[j],
324+
);
325+
}
326+
f[i][j] = ans;
327+
return ans;
328+
};
329+
return dfs(0, n - 1);
330+
}
331+
```
332+
333+
```ts
334+
function minScoreTriangulation(values: number[]): number {
335+
const n = values.length;
336+
const f: number[][] = Array.from({ length: n }, () =>
337+
Array.from({ length: n }, () => 0),
338+
);
339+
for (let i = n - 3; i >= 0; --i) {
340+
for (let j = i + 2; j < n; ++j) {
341+
f[i][j] = 1 << 30;
342+
for (let k = i + 1; k < j; ++k) {
343+
f[i][j] = Math.min(
344+
f[i][j],
345+
f[i][k] + f[k][j] + values[i] * values[k] * values[j],
346+
);
347+
}
348+
}
349+
}
350+
return f[0][n - 1];
351+
}
352+
```
353+
354+
```ts
355+
function minScoreTriangulation(values: number[]): number {
356+
const n = values.length;
357+
const f: number[][] = Array.from({ length: n }, () =>
358+
Array.from({ length: n }, () => 0),
359+
);
360+
for (let l = 3; l <= n; ++l) {
361+
for (let i = 0; i + l - 1 < n; ++i) {
362+
const j = i + l - 1;
363+
f[i][j] = 1 << 30;
364+
for (let k = i + 1; k < j; ++k) {
365+
f[i][j] = Math.min(
366+
f[i][j],
367+
f[i][k] + f[k][j] + values[i] * values[k] * values[j],
368+
);
369+
}
370+
}
371+
}
372+
return f[0][n - 1];
373+
}
374+
```
375+
304376
### **...**
305377

306378
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function minScoreTriangulation(values: number[]): number {
2+
const n = values.length;
3+
const f: number[][] = Array.from({ length: n }, () =>
4+
Array.from({ length: n }, () => 0),
5+
);
6+
for (let l = 3; l <= n; ++l) {
7+
for (let i = 0; i + l - 1 < n; ++i) {
8+
const j = i + l - 1;
9+
f[i][j] = 1 << 30;
10+
for (let k = i + 1; k < j; ++k) {
11+
f[i][j] = Math.min(
12+
f[i][j],
13+
f[i][k] + f[k][j] + values[i] * values[k] * values[j],
14+
);
15+
}
16+
}
17+
}
18+
return f[0][n - 1];
19+
}

0 commit comments

Comments
 (0)