当前位置: 首页 > news >正文

洛谷 P1853 投资的最大效益 题解

题目链接

洛谷 P1853 投资的最大效益

Task 1:100pts+ #11 TLE

对于长期持有一份债券,考虑转移较为麻烦,考虑按每年分别考虑,那么持有 \(x\) 债券 \(y\) 年,本金 \(a_x\) 元,可得 \(a_x+b_x\times y\) 元,赚了 \(b_x\times y\) 元;而 \(y\) 年分开考虑,每年本金 \(a_x\) 元,可得 \(a_x+b_x\) 元,赚 \(b_x\) 元,\(y\) 年即为 \(b_x\times y\) 元,二者相等。

所以可以看为每年单独考虑,分别进行决策,每年利益最大化后,总利益便也最大化了,时间复杂度 \(O(ndS)\),其中 \(S\) 可达 \(1.1^{40}s\),会超时。

#include<bits/stdc++.h>
using namespace std;const int D=15,S=30000000;
int s,n,d;
int a[D],b[D],dp[S];int main(){scanf("%d%d%d",&s,&n,&d);for (int i=1;i<=d;++i) scanf("%d%d",a+i,b+i);for (int i=1;i<=n;++i){memset(dp,0,sizeof dp);for (int j=1;j<=d;++j){for (int k=a[j];k<=s;++k) dp[k]=max(dp[k],dp[k-a[j]]+b[j]);}s+=dp[s];}printf("%d",s);return 0;
}

Task 2:时空一次优化

注意到题目中一个奇怪的条件:\(a\)\(1000\) 的倍数,所以对于总金额除以 \(1000\) 余下的零头,不会影响决策。考虑缩小上一份代码内层 \(k\) 的循环范围,对于 \(a_i,s\) 都主动整除 \(1000\),这样整体时间复杂度就少了 \(10^3\) 这一量级,还不会出错。

#include<bits/stdc++.h>
using namespace std;const int D=15,S=46000; // s_max=10^6,S=(10^6*1.1^40)/10^3
int s,n,d;
int a[D],b[D],dp[S];int main(){scanf("%d%d%d",&s,&n,&d);for (int i=1;i<=d;++i) scanf("%d%d",a+i,b+i);for (int i=1;i<=n;++i){memset(dp,0,sizeof dp);for (int j=1;j<=d;++j){for (int k=a[j]/1000;k<=s/1000;++k) dp[k]=max(dp[k],dp[k-a[j]/1000]+b[j]);}s+=dp[s/1000];}printf("%d",s);return 0;
}

Task 3:时间二次优化

再次进行时间上的优化。注意到每次都需要求一遍 \(\big\lfloor \dfrac{a_j}{1000}\big\rfloor\) 至上一次的 \(s\) 这一段,可以优化掉,每次在上一次基础上继续往后计算即可。时间复杂度直接降到 \(O(dS\div 1000)\),其中 \(S\) 为最终答案。

#include<bits/stdc++.h>
using namespace std;const int D=15,S=46000;
int s,n,d;
int a[D],b[D],dp[S];int main(){scanf("%d%d%d",&s,&n,&d);for (int i=1;i<=d;++i) scanf("%d%d",a+i,b+i);int m=-1;for (int i=1;i<=n;++i){for (int j=1;j<=d;++j){for (int k=(m==-1?a[j]:m)/1000;k<=s/1000;++k)dp[k]=max(dp[k],dp[k-a[j]/1000]+b[j]);}m=s,s+=dp[s/1000];}printf("%d",s);return 0;
}
http://www.jsqmd.com/news/188690/

相关文章:

  • 科研 PPT 避坑指南:AI 生成≠模板化!虎贲等考 AI 凭 “学术定制感” 惊艳答辩场
  • Ubuntu下编辑文本文件的方法
  • 基于大数据的老旧小区改造需求评估与分析系统毕设源码+文档+讲解视频
  • [开源软件/技术调研/Github] OSS Insight: 深入洞察开源软件社区的分析工具
  • 基于大数据的美妆产品网络评价的数据采集与分析毕设源码+文档+讲解视频
  • 问卷设计内卷现场:人工 1 周 vs AI30 分钟!虎贲等考 AI 凭 “学术含金量” 赢麻了
  • 基于大数据的热门旅游景点推荐系统毕设源码+文档+讲解视频
  • 基于大数据的专业智能导学系统的设计与实现毕设源码+文档+讲解视频
  • PyTorch动态图优化,后来才知道提速
  • 关于STL的知识:集合算法,你学会了吗
  • 【C++】IO流详解
  • 如何在C++的STL中巧妙运用std::find实现高效查找
  • 《不可被“框定”的理论:一场正在发生的生成性实验》研究
  • P14954 520 个人题解
  • 非遗万象图
  • 数据仓库与数据湖:大数据运营的存储架构对比
  • Docker一键搭建JmalCloud 个人网盘--自带博客!
  • 硅谷奇闻:英伟达创始人黄仁勋的家族传承与未来押注
  • Python+Vue的基于协同过滤算法的美食推荐系统 Pycharm django flask
  • vue基于Python基于大数据技术的共享单车数据分析与辅助管理系统 _Pycharm django flask
  • 学霸同款2025一键生成论文工具TOP9:本科生毕业论文必备测评
  • 深度测评!9个AI论文网站助你搞定毕业论文
  • 请求Cloudflare部署的pages资源的时候出现cors跨域问题
  • Python+Vue的基于大数据技术的电影推荐系统的设计与实现 Pycharm django flask
  • 学习笔记:PID算法入门笔记-电机控制-倒立摆
  • 吐血推荐!9款AI论文写作软件测评:研究生科研写作全攻略
  • Python+Vue的 增强可视化的广州IT招聘系统Pycharm django flask
  • Elasticsearch:在 Streams 中使用 ML 自动化 log 解析
  • 聚焦七大主战场丨华为孟晚舟:唯有迎难而上
  • 华为Pura 80系列有多香?到手可升级鸿蒙 6,至高还减1500元