社区讨论

关于本题一些思考

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 条回复,欢迎继续交流。

正在加载回复...