题目描述小伟突然获得一种超能力他知道未来 T 天 N 种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量以及卖出一个该纪念品换回的金币数量。每天小伟可以进行以下两种交易无限次任选一个纪念品若手上有足够金币以当日价格购买该纪念品卖出持有的任意一个纪念品以当日价格换回金币。每天卖出纪念品换回的金币可以立即用于购买纪念品当日购买的纪念品也可以当日卖出换回金币。当然一直持有纪念品也是可以的。T 天之后小伟的超能力消失。因此他一定会在第 T 天卖出所有纪念品换回金币。小伟现在有 M 枚金币他想要在超能力消失后拥有尽可能多的金币。输入格式第一行包含三个正整数 T,N,M相邻两数之间以一个空格分开分别代表未来天数 T纪念品数量 N小伟现在拥有的金币数量 M。接下来 T 行每行包含 N 个正整数相邻两数之间以一个空格分隔。第 i 行的 N 个正整数分别为 Pi,1,Pi,2,…,Pi,N其中 Pi,j 表示第 i 天第 j 种纪念品的价格。输出格式输出仅一行包含一个正整数表示小伟在超能力消失后最多能拥有的金币数量。输入输出样例输入 #1复制6 1 100 50 20 25 20 25 50输出 #1复制305输入 #2复制3 3 100 10 20 15 15 17 13 15 25 16输出 #2复制217说明/提示样例 1 说明最佳策略是第二天花光所有 100 枚金币买入 5 个纪念品 1第三天卖出 5 个纪念品 1获得金币 125 枚第四天买入 6 个纪念品 1剩余 5 枚金币第六天必须卖出所有纪念品换回 300 枚金币第四天剩余 5 枚金币共 305 枚金币。超能力消失后小伟最多拥有 305 枚金币。样例 2 说明最佳策略是第一天花光所有金币买入 10 个纪念品 1第二天卖出全部纪念品 1 得到 150 枚金币并买入 8 个纪念品 2 和 1 个纪念品 3剩余 1 枚金币第三天必须卖出所有纪念品换回 216 枚金币第二天剩余 1 枚金币共 217 枚金币。超能力消失后小伟最多拥有 217 枚金币。数据规模与约定对于 10% 的数据T1。对于 30% 的数据T≤4,N≤4,M≤100所有价格 10≤Pi,j≤100。另有 15% 的数据T≤100,N1。另有 15% 的数据T2,N≤100。对于 100% 的数据T≤100,N≤100,M≤103所有价格 1≤Pi,j≤104数据保证任意时刻小伟手上的金币数不可能超过 104。代码实现#include bits/stdc.h using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T, N, M; cin T N M; vectorvectorint p(T, vectorint(N)); for (int i 0; i T; i) { for (int j 0; j N; j) { cin p[i][j]; } } int money M; for (int i 0; i T - 1; i) { vectorint dp(money 1, 0); for (int j 0; j N; j) { int cost p[i][j]; int profit p[i 1][j] - p[i][j]; if (profit 0) continue; for (int k cost; k money; k) { dp[k] max(dp[k], dp[k - cost] profit); } } money dp[money]; } cout money \n; return 0; }
阅读完成 · 觉得有帮助?