LGP1853 题解
-
原题链接:P1853 投资的最大效益。
-
难度:
Easy+
。
稍有扩展的多重背包模板。
正解
容易发现,对于每年份购买的债券存在一个贪心策略:最大化每年的年利息,那么就可以转为对每年进行考虑。
可以将债券抽象成货物,投资额是体积
然后对每年做一次多重背包就可以了。
但是这样的时间复杂度是
注意到数据范围中保证了
下面考虑其做法的正确性。
因为
但是
因为
代码
#include <bits/stdc++.h>
const int N = 15, S = 1e5 + 10;
int s, n, m, v[N], w[N], f[S];
void input() {
std::cin >> s >> m >> n;
for (int i = 1; i <= n; ++i) {
std::cin >> v[i] >> w[i];
v[i] /= 1000;
}
}
void work() { // 做一次背包
memset(f, 0, sizeof(f));
int V = s / 1000;
for (int i = 1; i <= n; ++i) { // 遍历物品
for (int j = v[i]; j <= V; ++j) {
f[j] = std::max(f[j], f[j - v[i]] + w[i]);
}
}
s += f[V]; // 更新当前资产
}
int main() {
input();
while (m--) work();
std::cout << s << std::endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现