社区讨论
关于本题一些思考
P3140[USACO16FEB] Circular Barn Revisited G参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjd0otgt
- 此快照首次捕获于
- 2025/12/19 23:21 3 个月前
- 此快照最后确认于
- 2025/12/21 17:10 3 个月前
CPP
// 2025/12/19
// Author: Forever
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, k, r[201], pre[201], sum[201], dp[101][9];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> r[i], r[i + n] = r[i];
reverse(r + 1, r + n * 2 + 1);
for (int i = 1; i <= n * 2; i++)
sum[i] = sum[i - 1] + r[i], pre[i] = pre[i - 1] + r[i] * i;
int ans = 0x3f3f3f3f3f3f3f3f;
for (int h = 0; h < n; h++){
memset(dp, 0x3f, sizeof(dp));
dp[0][0] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= k; j++)
for (int p = 0; p < i; p++)
dp[i][j] = min(dp[i][j], dp[p][j - 1] + (sum[i - 1 + h] - sum[p + h]) * (i + h) - (pre[i - 1 + h] - pre[p + h]));
ans = min(ans, dp[n][k]);
}
cout << ans << endl;
return 0;
}
可以看到我状态转移方程似乎是可以斜率优化的,也许可以优化到o(n^2k)?有没有人试一下(
回复
共 0 条回复,欢迎继续交流。
正在加载回复...