news 2026/6/15 10:14:57

Kimi LeetCode 3256. 放三个车的价值之和最大 I C语言实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3256. 放三个车的价值之和最大 I C语言实现

以下是 LeetCode 3256. 放三个车的价值之和最大 I 的 C 语言实现。

核心思路

采用贪心 + 枚举候选值的策略:

1. 将所有格子按值从大到小排序
2. 取前 `2*(m+n)+1` 个最大值作为候选(最优解一定在其中)
3. 枚举候选中所有不冲突的三元组(行不同、列不同)

C 代码

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#define MOD 1000000007

typedef struct {
long long val;
int row;
int col;
} Cell;

// 比较函数:按值从大到小排序
int cmp(const void *a, const void *b) {
Cell *ca = (Cell *)a;
Cell *cb = (Cell *)b;
if (cb->val > ca->val) return 1;
if (cb->val < ca->val) return -1;
return 0;
}

long long maximumValueSum(int** board, int boardSize, int* boardColSize) {
int m = boardSize;
int n = boardColSize[0];

// 收集所有格子
Cell *cells = (Cell *)malloc(m * n * sizeof(Cell));
int idx = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cells[idx].val = board[i][j];
cells[idx].row = i;
cells[idx].col = j;
idx++;
}
}

// 按值从大到小排序
qsort(cells, m * n, sizeof(Cell), cmp);

// 候选范围:前 2*(m+n)+1 个
int range = 2 * (m + n) + 1;
if (range > m * n) range = m * n;

long long ans = INT64_MIN;

// 枚举三个候选格子
for (int i = 0; i < range; i++) {
long long v1 = cells[i].val;
int r1 = cells[i].row;
int c1 = cells[i].col;

for (int j = i + 1; j < range; j++) {
long long v2 = cells[j].val;
int r2 = cells[j].row;
int c2 = cells[j].col;

// 行或列冲突
if (r1 == r2 || c1 == c2) continue;

for (int k = j + 1; k < range; k++) {
long long v3 = cells[k].val;
int r3 = cells[k].row;
int c3 = cells[k].col;

// 检查是否与前面两个冲突
if (r3 == r1 || r3 == r2 || c3 == c1 || c3 == c2) continue;

long long sum = v1 + v2 + v3;
if (sum > ans) ans = sum;
}
}
}

free(cells);
return ans;
}
```

更节省内存的版本(每行前 3 大值)

```c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <limits.h>

typedef struct {
long long val;
int col;
} TopVal;

// 插入到前3大的合适位置
void insertTop3(TopVal *top3, long long val, int col) {
for (int i = 0; i < 3; i++) {
if (val > top3[i].val) {
// 后移
for (int j = 2; j > i; j--) {
top3[j] = top3[j-1];
}
top3[i].val = val;
top3[i].col = col;
break;
}
}
}

long long maximumValueSum(int** board, int boardSize, int* boardColSize) {
int m = boardSize;
int n = boardColSize[0];

// 每行保留前3大值
TopVal **top3 = (TopVal **)malloc(m * sizeof(TopVal *));
for (int i = 0; i < m; i++) {
top3[i] = (TopVal *)malloc(3 * sizeof(TopVal));
for (int j = 0; j < 3; j++) {
top3[i][j].val = INT64_MIN;
top3[i][j].col = -1;
}
}

// 填充每行前3大值
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
insertTop3(top3[i], board[i][j], j);
}
}

long long ans = INT64_MIN;

// 枚举三行
for (int r1 = 0; r1 < m; r1++) {
for (int r2 = r1 + 1; r2 < m; r2++) {
for (int r3 = r2 + 1; r3 < m; r3++) {
// 枚举每行的前3大值
for (int a = 0; a < 3 && top3[r1][a].col != -1; a++) {
long long v1 = top3[r1][a].val;
int c1 = top3[r1][a].col;
for (int b = 0; b < 3 && top3[r2][b].col != -1; b++) {
long long v2 = top3[r2][b].val;
int c2 = top3[r2][b].col;
if (c1 == c2) continue;
for (int c = 0; c < 3 && top3[r3][c].col != -1; c++) {
long long v3 = top3[r3][c].val;
int c3 = top3[r3][c].col;
if (c3 == c1 || c3 == c2) continue;
long long sum = v1 + v2 + v3;
if (sum > ans) ans = sum;
}
}
}
}
}
}

// 释放内存
for (int i = 0; i < m; i++) {
free(top3[i]);
}
free(top3);

return ans;
}
```

复杂度分析

解法 时间复杂度 空间复杂度
解法一(排序枚举) O(mn log(mn) + (m+n)³) O(mn)
解法二(每行前3) O(mn + m³ × 27) O(m)

关键点

- 候选范围:`2*(m+n)+1` 的推导基于最优解中每个车至少排除一行一列,因此前 `2*(m+n)+1` 个最大值必包含最优解
- 冲突检查:三个车必须行不同、列不同
- 内存管理:C 语言需手动 `malloc`/`free`,避免内存泄漏
- 初始值:`ans` 初始化为 `INT64_MIN`,因为值可能为负数

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

遗传算法工程化实战:从早熟收敛到生产可用的十二道关卡

1. 项目概述&#xff1a;为什么“遗传算法第二讲”比第一讲更值得你花时间重读“遗传算法第二讲”这个标题乍看平平无奇&#xff0c;像是某门研究生课程的课件编号&#xff0c;或是某本经典教材的章节延续。但如果你已经翻过《A Fundamental Introduction to Genetic Algorithm…

作者头像 李华
网站建设 2026/6/15 10:10:04

XUnity自动翻译器完整教程:3步实现Unity游戏中文汉化

XUnity自动翻译器完整教程&#xff1a;3步实现Unity游戏中文汉化 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏的语言障碍而困扰吗&#xff1f;XUnity自动翻译器为你提供了完美的解决方案…

作者头像 李华
网站建设 2026/6/15 10:02:51

AI幻觉兜底协议:构建可审计、可熔断、可追责的工程化风控体系

1. 项目概述&#xff1a;这不是保险产品&#xff0c;而是一场关于AI可信边界的实战推演“Hallucination Insurance: When AI Lies, Who Pays the Bill?”——这个标题乍看像一篇财经评论或法律专栏的标题&#xff0c;但在我过去十年跟踪AI落地项目的实践中&#xff0c;它精准戳…

作者头像 李华
网站建设 2026/6/15 9:58:57

机器学习模型生产化部署:从Notebook到高可用服务的七道关卡

1. 项目概述&#xff1a;当模型走出Jupyter&#xff0c;真正开始呼吸真实世界的空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号&#xff0c;专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被生产环…

作者头像 李华