Розгляньмо трикутник, що містить сторону . Нехай його третьою вершиною буде , тоді трикутник має вигляд (1, n, x).
Якщо x = n - 1, то ми просто відкидаємо трикутник (1, n, n - 1), після чого залишається (n - 1) - кутник, який будемо триангулярити далі.
Якщо 1 < x < n - 1, то розгляньмо трикутник (n, x, k), де x < k < n.
Замінімо пару трикутників (1, x, n) і (n, x, k) на пару (1, x, k) і (1, n, k). Сумарна вага трикутників зменшиться, оскільки xn + xnk > xk + nk. Після перегрупування отримаємо
Нерівність правдива, оскільки n - k > 0 і x - 1 > 0.
З цього випливає, що трикутник (1, x, n) вигідніше замінити на (1, k, n), де k > x. Отже, оптимальним вибором буде x = n - 1. Мінімальна вага триангуляції досягається, якщо провести всі діагоналі з вершини .
Сума ваг усіх трикутників, що виходять з вершини , дорівнює
Приклад
У першому тесті задано трикутник з вершинами . Його вага дорівнює 1 \cdot 2 \cdot 3 = 6.
У другому тесті задано квадрат з вершинами 1, 2, 3, 4. Мінімальна вага досягається при триангуляції з діагоналлю :
Реалізація алгоритму
Читаємо вхідні дані.
scanf("%d", &n);Обчислюємо відповідь.
res = 0;
for (i = 2; i < n; i++)
res += 1ll * i * (i + 1);Виводимо відповідь.
printf("%lld\n", res);