首页 > 其他分享 >动态规划入门/背包

动态规划入门/背包

时间:2024-07-09 16:22:38浏览次数:17  
标签:10 le 入门 int 背包 债券 利息 总资产 动态

投资的最大效益

题目背景

约翰先生获得了一大笔遗产,他暂时还用不上这一笔钱,他决定进行投资以获得更大的效益。银行工作人员向他提供了多种债券,每一种债券都能在固定的投资后,提供稳定的年利息。当然,每一种债券的投资额是不同的,一般来说,投资越大,收益也越大,而且,每一年还可以根据资金总额的增加,更换收益更大的债券。

题目描述

例如:有如下两种不同的债券:

  1. 投资额 \(\$4000\),年利息 \(\$400\);
  2. 投资额 \(\$3000\),年利息 \(\$250\)。

初始时,有 \(\$10000\) 的总资产,可以投资两份债券 1 债券,一年获得 \(\$800\) 的利息;而投资一份债券 1 和两份债券 2,一年可获得 \(\$900\) 的利息,两年后,可获得 \(\$1800\) 的利息;而所有的资产达到 \(\$11800\),然后将卖掉一份债券 2,换购债券 1,年利息可达到 \(\$1050\);第三年后,总资产达到 \(\$12850\),可以购买三份债券 1,年利息可达到 \(\$1200\),第四年后,总资产可达到 \(\$14050\)。

现给定若干种债券、最初的总资产,帮助约翰先生计算,经过 \(n\) 年的投资,总资产的最大值。

输入格式

第一行为三个正整数 \(s, n, d\),分别表示最初的总资产、年数和债券的种类。

接下来 \(d\) 行,每行表示一种债券,两个正整数 \(a, b\) 分别表示债券的投资额和年利息。

输出格式

仅一个整数,表示 \(n\) 年后的最大总资产。

样例 #1

样例输入 #1

10000 4 2
4000 400
3000 250

样例输出 #1

14050

提示

对于 \(100 \%\) 的数据,\(1 \le s \le {10}^6\),\(2 \le n \le 40\),\(1 \le d \le 10\),\(1 \le a \le {10}^4\),且 \(a\) 是 \(1000\) 的倍数,\(b\) 不超过 \(a\) 的 \(10\%\)。

解题思路

\(f(i,j)\)表示第i年总金额不超过j的所有债券选择方式。

\(dp[j]\)表示当前年份在投资金额为j的情况下所有债券选择方式的盈利情况。

投资金额不得超过当前年份的总资产额。每一年都把股票卖了全部重新买一遍,下一年收取最优投资利润。

题目中给出a为1000的倍数,意味着我们在进行计算的时候可以将原本非常大的数据/1000,缩小了dp数组的存储范围

#include<bits/stdc++.h>
using namespace std;
const int N = 2000000;
int v[N];
int w[N];
int dp[N];
int s,n,d;
int main(){
	cin>>s>>n>>d;
	int ans=0;
	for(int i=1;i<=d;i++){
		int a,b;
		cin>>a>>b;
		v[i]=a;
		w[i]=b;
	}
	for(int i=1;i<=n;i++){
		int all=s/1000;
		for(int t=1;t<=d;t++){
			for(int j=v[t]/1000;j<=all;j++){			
			dp[j]=max(dp[j],dp[j-v[t]/1000]+w[t]);	
			}
		}
		s+=dp[all];
		memset(dp,0,sizeof(dp)); 
	}	
	cout<<s<<endl;	
	return 0;
} 

标签:10,le,入门,int,背包,债券,利息,总资产,动态
From: https://www.cnblogs.com/haihaichibaola/p/18292184

相关文章

  • 单片机-Flash动态自保存
         说明:该方法为固定大小的数据包方式进行记录,写满一页后再擦除设定页从新记录,增加Flash使用寿命。    环境需求:Flash需要可程序读写。    以STM32,中容量为例(HAL库方式)。        注意事项:避开程序空间,注意页的大小有的为1K,有的为2K按需......
  • 使用Hutool实现动态定时任务
    项目依赖首先,您需要在项目中添加Hutool库的依赖。可以在pom.xml中添加以下内容:<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.25</version></dependency>在实现动态定时任务之前,假设我们有一个名为Cron的......
  • QT入门看这一篇就够(详解含qt源码)
     目录一、Qt概述1.1什么是Qt1.2Qt的发展史1.3Qt的优势1.4Qt版本1.5成功案例二、创建Qt项目2.1使用向导创建2.2一个最简单的Qt应用程序2.2.1main函数中2.2.2类头文件2.3.pro文件2.4命名规范 2.5QtCreator常用快捷键三、Qt按钮小程序3.1按钮的创建......
  • 动态SQL
    mybatis中动态sql标签1:if标签  1)数值类型的判断不等于的判断://注意Interge类型的条件判断是否为空的时候一定不要加非空字符串判断,因为当你传的值为0的时候,mybatis会把它判断为空字符串<iftest="equipTypeId!=null">ANDt1.equip_type_id=#{equipTypeId......
  • C++入门知识
    1.命名空间1.1命名空间的概念在c/c++中,变量,函数,以及类都是大量存在的,这些变量,函数和类的名字会存在全局作用域中,会导致名字重复的问题。使用命名空间的目的是对标识符的名称进行本地化,以避免名字冲突或者名字污染,namespace关键字出现就是针对这种问题。例子:可以打印出rand......
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    前言想要成为黑客,却苦于没有方向,不知道从何学起,下面这篇黑客入门教程可以帮你实现自己的黑客梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后首先咱们聊聊,学习网络安全方向通常会有哪些问题1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒......
  • php函数入门学习(date&time&strtotime)
    1.date()date()函数是PHP中用于格式化日期和时间的一个非常常用的函数。它可以根据指定的格式字符串返回当前时间或指定时间的日期和时间。 基本语法:stringdate(string$format[,int$timestamp=time()])-`$format`:一个格式化字符串,定义了输出的日期和时间的......
  • Studying-代码随想录训练营day33| 动态规划理论基础、509.斐波那契函数、70.爬楼梯、7
    第33天,动态规划开始,新的算法......
  • 【产品经理修炼之道】-产品经理入门经验总结
    想做好产品经理这一岗位首先需要有产品经理的自我定位,其次需要做好整个项目流程的工作;当然,如何高效沟通是产品经理非常重要的一个工作技能,对工作效率有非常大的影响。接下来,让我们看看作者是如何做的吧~刚刚接触产品经理的同学,或多或少都会因未知产生恐惧和迷茫,所以需要提前......
  • 深度学习入门:基于Python的理论与实现 (斋藤康毅)
    PDF:访问python33深度学习基础:介绍深度学习的基本概念、原理和发展历史。Python编程:提供使用Python进行深度学习实现的基础知识,包括必要的编程技能和工具。神经网络:解释神经网络的基本结构和工作原理,以及如何构建和训练简单的神经网络。深度学习框架:探讨流行的深度学习......