#RZX5359. 仓储交易(space)
仓储交易(space)
Problem Description
跨境仓储套利
题目描述
小伟是一家跨境物流公司的调度员。公司的中转仓将连续运营 天,期间共有 种货物在仓中流转。第 天,第 种货物的到岸价与离岸价都是 枚金币:第 天收购一份该货物要花掉 枚金币,第 天把一份该货物发运出仓可以换回 枚金币。
在第 天,小伟可以进行以下两种操作任意多次:
- 任选一种货物,若账上金币足够,以第 天的价格收购一份该货物入仓;
- 把仓中持有的任意一份货物发运出仓,以第 天的价格换回金币。
同一天内,发运换回的金币可以立即用于收购,刚入仓的货物也可以当天发运出仓。当然,把货物压在仓里等到后面的某一天再发运也是允许的。
第 天收盘后中转仓关闭,届时仓中不允许留下任何货物,未发运的货物只能按第 天的价格全部折现。
小伟现在账上有 枚金币。请你求出:中转仓关闭、全部货物折现之后,他最多能拥有多少金币。
输入格式
从文件 space.in 读入。
第一行包含三个正整数 ,相邻两数之间以一个空格分开,分别代表中转仓运营的天数 ,货物的种数 ,小伟现在拥有的金币数量 。
接下来 行,每行包含 个正整数,相邻两数之间以一个空格分隔。第 行的 个正整数分别为 ,其中 表示第 天第 种货物的价格。
输出格式
输出到文件 space.out。
输出仅一行,包含一个正整数,表示中转仓关闭后小伟最多能拥有的金币数量。
输入输出与文件要求
本题为文件输入输出(IO 赛制),必须使用 freopen 重定向,不能只使用标准输入输出。 请在 main 函数开头写上:
freopen("space.in", "r", stdin); // 文件输入
freopen("space.out", "w", stdout); // 文件输出
完整的 main 框架如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("space.in", "r", stdin); // 文件输入
freopen("space.out", "w", stdout); // 文件输出
// ... 你的代码 ...
fclose(stdin);
fclose(stdout);
return 0;
}
样例
样例 1
输入
6 1 100
50
20
25
20
25
50
输出
305
样例 2
输入
3 3 100
10 20 15
15 17 13
15 25 16
输出
217
提示
样例 1 说明
最佳策略是:
第二天花光所有 枚金币收购 份货物 入仓;
第三天把 份货物 发运出仓,换回金币 枚;
第四天收购 份货物 ,剩余 枚金币;
第六天必须把仓中货物全部折现,换回 枚金币,加上第四天剩余 枚金币,共 枚金币。
中转仓关闭后,小伟最多拥有 枚金币。
样例 2 说明
最佳策略是:
第一天花光所有金币收购 份货物 入仓;
第二天把全部货物 发运出仓得到 枚金币,并收购 份货物 和 份货物 ,剩余 枚金币;
第三天必须把仓中货物全部折现,换回 枚金币,加上第二天剩余 枚金币,共 枚金币。
中转仓关闭后,小伟最多拥有 枚金币。
数据规模与约定
对于 的数据,。
对于 的数据,,所有价格 。
另有 的数据,。
另有 的数据,。
对于 的数据,,所有价格 ,数据保证任意时刻,小伟手上的金币数不可能超过 。
评测方式
本题使用文件输入输出:评测时会把测试数据放到程序运行目录下的 space.in,并读取程序生成的 space.out。请确认你的程序在没有任何标准输入的情况下也能正确运行。