feat: 添加P1775动态规划解法实现

实现Luogu P1775问题的动态规划解法,使用区间DP计算最小合并成本
This commit is contained in:
Zengtudor 2025-10-01 09:43:05 +08:00
parent eb451f8c09
commit 1573b1301b

39
src/10/P1775.cpp Normal file
View File

@ -0,0 +1,39 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
using ll = int64_t;
const ll maxn = 300 + 5, inf = 1e18;
ll m[maxn], s[maxn];
ll n, dp[maxn][maxn];
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n;
for (ll i = 1; i <= n; ++i) {
std::cin >> m[i];
s[i] = s[i - 1] + m[i];
dp[i][i] = 0;
}
for (ll i = 1; i <= n; ++i) {
for (ll j = i + 1; j <= n; ++j) {
dp[i][j] = inf;
}
}
for (ll len = 2; len <= n; ++len) {
for (ll i = 1; i + len - 1 <= n; ++i) {
ll j = i + len - 1;
for (ll k = i; k < j; ++k) {
dp[i][j] = std::min(dp[i][j], dp[i][k] + dp[k + 1][j] + s[j] - s[i - 1]);
}
}
}
std::cout << dp[1][n] << "\n";
}