news 2026/4/9 3:47:35

凸包优化dp|partial_sum

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
凸包优化dp|partial_sum

lc3826

抽象为点积->凸包 投影

差集 下凸包

划分型dp f k i (fk-1 j) + (si-j)

struct vec {
long long x, y;
};

vec sub(vec a, vec b) {
return vec{a.x - b.x, a.y - b.y};
}

long long dot(vec a, vec b) {
return a.x * b.x + a.y * b.y;
}

// 如果乘法会溢出,用 __int128
__int128 det(vec a, vec b) {
return (__int128) a.x * b.y - (__int128) a.y * b.x;
}

class Solution {
public:
long long minPartitionScore(vector<int>& nums, int k) {
int n = nums.size();
vector<int> sum(n + 1); // nums 的前缀和
partial_sum(nums.begin(), nums.end(), sum.begin() + 1);

vector<long long> f(n + 1, LLONG_MAX / 2);
f[0] = 0;

vector<vec> q(n - k + 2);

for (int K = 1; K <= k; K++) {
int head = 0, tail = 0; // 模拟 deque

long long s = sum[K - 1];
q[tail++] = vec{s, f[K - 1] + s * s - s};

for (int i = K; i <= n - (k - K); i++) { // 其他子数组的长度至少是 1
s = sum[i];
vec p = {-2 * s, 1};
while (tail - head > 1 && dot(p, q[head]) >= dot(p, q[head + 1])) {
head++;

}

vec v{s, f[i] + s * s - s};
f[i] = dot(p, q[head]) + s * s + s;

while (tail - head > 1 && det(sub(q[tail - 1], q[tail - 2]), sub(v, q[tail - 1])) <= 0) {
tail--;

}
q[tail++] = v;
}
}

return f[n] / 2;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 5:18:38

2026 AI营销榜单发布:原圈科技夺魁,揭示ROI提升300%的秘密

本文深度剖析2026年AI营销格局&#xff0c;发布权威五强企业榜单。在众多厂商中&#xff0c;原圈科技凭借其覆盖全周期的AI营销解决方案和超过十年的行业深耕&#xff0c;在技术创新、市场渗透及客户投资回报率等多个维度下表现突出&#xff0c;被普遍视为酒旅、汽车、零售等重…

作者头像 李华
网站建设 2026/3/28 9:40:35

指纹浏览器的 “反风控” 密码:从内核定制到场景落地

在多账号运营、数据采集的场景中&#xff0c;指纹浏览器的核心价值在于打破平台风控壁垒&#xff0c;通过环境隔离与特征模拟&#xff0c;让账号运行更安全、更高效。其技术架构围绕内核定制、指纹模拟、网络优化三大核心模块展开&#xff0c;各模块协同作用&#xff0c;构建独…

作者头像 李华
网站建设 2026/4/2 1:29:56

大模型落地必看:如何用量化指标,给你的模型模型打个分?

大家好&#xff01;我是你们的AI技术老友。 很多同学在后台私信我&#xff1a;“博主&#xff0c;我熬夜用显卡跑完了模型模型&#xff0c;结果感觉回复还是‘差点意思’&#xff0c;但是‘意思’到底差在哪&#xff1f;我该怎么跟增压报告音响效果&#xff1f;” 确实&#…

作者头像 李华