logo AlgoBeat OnlineJudge
登录 注册

#214795. [RMI 2025] 松鼠 / Squirrel

内存限制:2048 MiB 时间限制:1000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

一只松鼠发现了一个存放坚果的储藏室。
储藏室包含 行房间,编号从
索引为 的一行包含 个房间,编号从
位于第 行第 列的房间包含 个坚果。

个房间中,数 两两不同,且取值在 之间。

形式化地说,储藏室的形状是一个三角形半矩阵,即主对角线下方(包含主对角线)的那一部分,其中每个元素表示坚果数量。
这个半矩阵中的数是从 的所有整数,每个数恰好出现一次。

例如,当 时,储藏室会有 15 个房间,包含从 1 到 15 的数字。
这种储藏室的一个例子可以是下面所示的半矩阵:

::::align{center} ::::

松鼠沿着主对角线行走,并且在位于 的每个房间,它会选择一个位于以 为右上角、以 为左下角的矩形中的房间,并吃掉该房间里的橡实。
在上面的例子中,当松鼠位于 时,它可以选择吃掉红色标出的 8 个房间中的任意一个房间里的坚果。
当它走过主对角线上的所有房间并且恰好吃了 个不同房间里的坚果后,松鼠心满意足地离开。

要求:给定 以及对任意 ,求松鼠最多能吃到多少坚果。
同时,对于它访问的 个房间中的每一个,求松鼠所吃的坚果数量。

实现细节

这是一道(函数式)交互题。你不需要,也不应该定义 main 函数。

你需要实现函数

void solve(int N, vector<vector<int>> A, long long& answer, vector<int>& solution)

函数参数:

输入数据:

  • int N:储藏室大小 / 行数
  • vector<vector<int>> A:每个房间中的坚果数量(更准确地说,在 中,,你会找到第 行第 个位置的房间中的坚果数量)

输出数据:

  • long long &answer:将包含松鼠走过对角线上的全部 个房间后能够吃到的最大坚果数量。
  • vector<int> &solution:一个 vector<int>,包含松鼠在每个房间中吃到的坚果数量。(更准确地说, 表示松鼠位于房间 时吃到的坚果数量)

注意:对于 ,下标从 开始,并且 的大小应当恰好为

输入格式

见「实现细节」。

输出格式

见「实现细节」。

样例

样例输入 1

5
1
14 6
8 2 15
3 10 4 12
9 5 13 11 7

样例输出 1

64
14 10 15 12 13

数据范围与提示

约束

# 分数 约束
矩阵的内容是随机分配的。
无额外约束