Solution - Stock Market G
Link。
一句话题意:求通过买卖股票能获得的最大钱数。
有一个转化(鬼知道怎么想到的):在第 天买股票然后在第 天卖出股票等价于在第 天买股票然后在第 天卖出( 只)股票,再在第 天买( 只)股票然后在第 天卖出( 只)股票,……,最后在第 天买( 只)股票然后在第 天卖出( 只)股票。
通过这样巧妙的转化(确信),我们就可以把问题转化成相邻两天的买卖。于是我们就可以令 从第 天到第 天循环,对邮票做完全背包,体积(买进,会消耗钱)是每只邮票第 天的价格,价值(卖出,会得到钱)是第 天的价格,做完之后更新一下总钱数继续循环做即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 55, M = 105, K = 5e5 + 5;
int s, d, m, p[N][M];
int f[K];
int main() {
scanf("%d %d %d", &s, &d, &m);
for (int i = 1; i <= s; i++)
for (int j = 1; j <= d; j++)
scanf("%d", &p[i][j]); // p[i][j] 为第 i 只股票第 j 天的价格
for (int i = 1; i < d; i++) { // i 循环 [1, d)
for (int j = 0; j <= m; j++) f[j] = j; // 可以啥也不干,总钱数就是 j
for (int j = 1; j <= s; j++)
for (int k = p[j][i]; k <= m; k++)
f[k] = max(f[k], f[k - p[j][i]] + p[j][i + 1]); // 完全背包
m = f[m]; // 最后更新一下 m
}
printf("%d\n", m);
return 0;
}
所以这道题和 CSP-J2019 的纪念品有啥区别。
USACO 抄袭 CCF,退钱!!1
Posted by liuzimingc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)