Codeforces Dp

Zero Remainder Sum

  采用辅助数组 ndp[m+1][m2][k] 来求出每一行中在当前第 i 列,取了 j 个物品,总和模 k 的余数是 t 的最大和是多少。用 dp[n+1][k] 来转移每一行的状态。

#include <bits/stdc++.h> using namespace std; const int inf = std::numeric_limits<int>::max() / 2; signed main() { std::cin.tie(nullptr)->sync_with_stdio(false); int n, m, k; std::cin >> n >> m >> k; std::vector<std::vector<int>> a(n, std::vector<int>(m)); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) std::cin >> a[i][j]; std::vector<std::vector<int>> dp(n + 1, std::vector<int>(k, -inf)); dp[0][0] = 0; for (int i = 0; i < n; i++) { std::vector<std::vector<std::vector<int>>> ndp(m + 1, std::vector<std::vector<int>>(m / 2 + 1, std::vector<int>(k, -inf))); ndp[0][0][0] = 0; for (int j = 0; j < m; j++) { ndp[j + 1] = ndp[j]; for (int p = 0; p < m / 2; p++) { for (int q = 0; q < k; q++) { ndp[j + 1][p + 1][(q + a[i][j]) % k] = std::max(ndp[j + 1][p + 1][(q + a[i][j]) % k], ndp[j][p][q] + a[i][j]); } } } std::vector<int> Max(k, -inf); for (int j = 0; j < k; j++) { for (int p = 0; p <= m / 2; p++) { Max[j] = std::max(Max[j], ndp[m][p][j]); } } for (int j = 0; j < k; j++) { for (int p = 0; p < k; p++) { dp[i + 1][(j + p) % k] = std::max(dp[i + 1][(j + p) % k], dp[i][j] + Max[p]); } } } std::cout << dp[n][0] << "\n"; }

Array Shrinking

  区间dp,记录l, r区间合并后的和是多少,如果[l, mid]和[mid + 1, r]的和相同且 dp[l][m] == dp[m + 1][r] == 1 就可以将这个[l, r]的区间合并为一个区间。

#include <bits/stdc++.h> using namespace std; signed main() { std::cin.tie(nullptr)->sync_with_stdio(false); int n; std::cin >> n; std::vector<int> a(n + 1); std::vector<std::vector<int>> dp(n + 1, std::vector<int>(n + 1, 1e9)); auto w = dp; for (int i = 1; i <= n; i++) std::cin >> a[i], dp[i][i] = 1, w[i][i] = a[i]; for (int len = 1; len <= n; len++) { for (int l = 1; l <= n - len; l++) { int r = l + len; for (int m = l; m < r; m++) { dp[l][r] = std::min(dp[l][r], dp[l][m] + dp[m + 1][r]); if (w[l][m] == w[m + 1][r] && dp[l][m] == dp[m + 1][r] && dp[l][m] == 1) { dp[l][r] = 1; w[l][r] = w[l][m] + 1; } } } } std::cout << dp[1][n] << "\n"; }

__EOF__

本文作者HoneyGrey
本文链接https://www.cnblogs.com/Haven-/p/17331152.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   浅渊  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-04-18 Namomo Div1 每日一题 排序
2022-04-18 Codeforces Round #782
点击右上角即可分享
微信分享提示