#include <iostream>
#include <vector>
#include <limits>
using namespace std;
// 計算 dp(s, t, m)
int dp(vector<vector<vector<int>>>& memo, const vector<int>& sequence, int s, int t, int m) {
if (m == 0) return 0;
if (memo[s][t][m] != -1) return memo[s][t][m];
int minCost = numeric_limits<int>::max();
for (int i = s + 1; i < t; ++i) {
for (int k = 0; k < m; ++k) {
if ((i - s) > k && (t - i) > (m - k - 1)) {
int cost = dp(memo, sequence, s, i, k) + dp(memo, sequence, i, t, m - k - 1) + (sequence[t - 1] - sequence[s]);
minCost = min(minCost, cost);
}
}
}
return memo[s][t][m] = minCost;
}
int main() {
int n;
cout << "input how many numbers" << endl;
cin >> n;
vector<int> sequence(n);
cout << "input the numbers vector" << endl;
for (int i = 0; i < n; ++i) {
cin >> sequence[i]; // 輸入序列
}
cout << "input how many choose" << endl;
int m;
cin >> m; // 輸入要選擇的元素個數
// 初始化記憶數組
vector<vector<vector<int>>> memo(n + 1, vector<vector<int>>(n + 1, vector<int>(m + 1, -1)));
int result = dp(memo, sequence, 0, n, m);
cout << "Minimum cost: " << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGltaXRzPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8g6KiI566XIGRwKHMsIHQsIG0pCmludCBkcCh2ZWN0b3I8dmVjdG9yPHZlY3RvcjxpbnQ+Pj4mIG1lbW8sIGNvbnN0IHZlY3RvcjxpbnQ+JiBzZXF1ZW5jZSwgaW50IHMsIGludCB0LCBpbnQgbSkgewogICAgaWYgKG0gPT0gMCkgcmV0dXJuIDA7CiAgICBpZiAobWVtb1tzXVt0XVttXSAhPSAtMSkgcmV0dXJuIG1lbW9bc11bdF1bbV07CgogICAgaW50IG1pbkNvc3QgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKICAgIGZvciAoaW50IGkgPSBzICsgMTsgaSA8IHQ7ICsraSkgewogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbTsgKytrKSB7CiAgICAgICAgICAgIGlmICgoaSAtIHMpID4gayAmJiAodCAtIGkpID4gKG0gLSBrIC0gMSkpIHsKICAgICAgICAgICAgICAgIGludCBjb3N0ID0gZHAobWVtbywgc2VxdWVuY2UsIHMsIGksIGspICsgZHAobWVtbywgc2VxdWVuY2UsIGksIHQsIG0gLSBrIC0gMSkgKyAoc2VxdWVuY2VbdCAtIDFdIC0gc2VxdWVuY2Vbc10pOwogICAgICAgICAgICAgICAgbWluQ29zdCA9IG1pbihtaW5Db3N0LCBjb3N0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWVtb1tzXVt0XVttXSA9IG1pbkNvc3Q7Cn0KCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBjb3V0IDw8ICJpbnB1dCBob3cgbWFueSBudW1iZXJzIiA8PCBlbmRsOwogICAgY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiBzZXF1ZW5jZShuKTsKICAgIGNvdXQgPDwgImlucHV0IHRoZSBudW1iZXJzIHZlY3RvciIgPDwgZW5kbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY2luID4+IHNlcXVlbmNlW2ldOyAvLyDovLjlhaXluo/liJcKICAgIH0KCWNvdXQgPDwgImlucHV0IGhvdyBtYW55IGNob29zZSIgPDwgZW5kbDsKICAgIGludCBtOwogICAgY2luID4+IG07IC8vIOi8uOWFpeimgemBuOaTh+eahOWFg+e0oOWAi+aVuAoKICAgIC8vIOWIneWni+WMluiomOaGtuaVuOe1hAogICAgdmVjdG9yPHZlY3Rvcjx2ZWN0b3I8aW50Pj4+IG1lbW8obiArIDEsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4obiArIDEsIHZlY3RvcjxpbnQ+KG0gKyAxLCAtMSkpKTsKCiAgICBpbnQgcmVzdWx0ID0gZHAobWVtbywgc2VxdWVuY2UsIDAsIG4sIG0pOwogICAgY291dCA8PCAiTWluaW11bSBjb3N0OiAiIDw8IHJlc3VsdCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==