CF 1839 D
题目描述
给定
- 插入一个颜色为
的小球,此操作最多执行 次。 - 选择一个非零球,使得该球与至少一个
小球相邻。并把该小球移动到任意位置。这样会花费 的代价。
对于每个
思路
定义
如果
否则,对于所有
空间复杂度
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 505, INF = MAXN;
int t, n, a[MAXN], dp[MAXN][MAXN], ans;
void Solve() {
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> a[i];
}
for(int i = 0; i <= n + 1; ++i) {
for(int j = 0; j <= n; ++j) {
dp[i][j] = INF;
}
}
dp[0][0] = 0, a[n + 1] = n + 1;
for(int i = 1; i <= n + 1; ++i) {
for(int j = 0; j <= n; ++j) {
if(a[i] > a[i - 1]) {
dp[i][j] = dp[i - 1][j];
}
if(j) {
for(int k = 0; k < i - 1; ++k) {
if(a[k] < a[i]) {
dp[i][j] = min(dp[i][j], dp[k][j - 1] + i - k - 1);
}
}
}
}
}
ans = dp[n + 1][0];
for(int i = 1; i <= n; ++i) {
ans = min(ans, dp[n + 1][i]);
cout << ans << " \n"[i == n];
}
}
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
for(cin >> t; t--; Solve()) {
}
return 0;
}
本文作者:Yaosicheng124
本文链接:https://www.cnblogs.com/yaosicheng124/p/18416688
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步