mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-17 21:42:25 +00:00
feat: 添加P1775动态规划解法实现
实现Luogu P1775问题的动态规划解法,使用区间DP计算最小合并成本
This commit is contained in:
parent
eb451f8c09
commit
1573b1301b
39
src/10/P1775.cpp
Normal file
39
src/10/P1775.cpp
Normal 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";
|
||||
}
|
Loading…
Reference in New Issue
Block a user