USACO Stock Market
洛谷 P2938 [USACO09FEB]股票市场Stock Market
JDOJ 2625: USACO 2009 Feb Gold 2.Stock Market
题目描述
Despite their innate prudence, the cows took a beating in the home mortgage market and now are trying their hand at stocks. Happily, Bessie is prescient and knows not only today's S (2 <= S <= 50) stock prices but also the future stock prices for a total of D days (2 <= D <= 10).
Given the matrix of current and future stock prices on various days (1 <= PR_sd <= 1,000) and an initial M (1 <= M <= 200,000) units of money, determine an optimal buying and selling strategy in order to maximize the gain realized by selling stock on the final day. Shares must be purchased in integer multiples, and you need not spend all the money (or any money). It is guaranteed that you will not be able to earn a profit of more than 500,000 units of money.
Consider the example below of a bull (i.e., improving) market, the kind Bessie likes most. In this case, S=2 stocks and D=3 days. The cows have 10 units of money to invest.
|Stock|Today's price| Tomorrow's price| | Two days hence Stock | | | :-----------: | :-----------: | :-----------: | :-----------: | | AA | 10 | 15 | 15 | |BB | 13| 11|20 |
If money is to be made, the cows must purchase stock 1 on day 1. Selling stock 1 on day 2 and quickly buying stock 2 yields 4 money in the bank and one share of 2. Selling stock 2 on the final day brings in 20 money for a total of 24 money when the 20 is added to the bank.
输入格式
* Line 1: Three space-separated integers: S, D, and M
* Lines 2..S+1: Line s+1 contains the D prices for stock s on days 1..D: PR_sd
输出格式
* Line 1: The maximum amount of money possible to have after selling on day D.
题意翻译
题目描述
尽管奶牛天生谨慎,它们仍然在住房抵押信贷市场中大受打击,现在它们准备在股市上碰碰运气。贝西有内部消息,她知道 SS 只股票在今后 DD 天内的价格。
假设在一开始,她筹集了 MM 元钱,那么她该怎样操作才能赚到最多的钱呢?贝西在每天可以买卖多只股票,也可以多次买卖同一只股票,交易单位必须是整数,数量不限。举一个牛市的例子:
假设贝西有 10 元本金,股票价格如下:
| 股票 | 今天的价格 | 明天的价格 | 后天的价格 |
|---|---|---|---|
| AA | 10 | 15 | 15 |
| BB | 13 | 11 | 20 |
最赚钱的做法是:今天买入 AA 股 1 张,到明天把它卖掉并且买入 B 股 1 张,在后天卖掉 B股,这样贝西就有 24 元了。
输入格式
第一行:三个整数 S, D 和 M,2 ≤ S ≤ 502≤S≤50 ; 2 ≤ D ≤ 102≤D≤10 ; 1 ≤ M ≤ 2000001≤M≤200000
第二行到第 S + 1 行:第 i + 1 行有 D 个整数: P_{i;1}P**i;1 到 P_{i;D}P**i;D,表示第 ii 种股票在第一天到最后一天的售价,对所有1 ≤ j ≤ D1≤j≤D,1 ≤ Pi1≤P**i;j ≤ 1000j≤1000
输出格式
单个整数:表示奶牛可以获得的最大钱数,保证这个数不会超过 500000500000
输入输出样例
输入 #1复制
输出 #1复制
题解:
一道怪异的背包问题。
首先,我们能明确一点,就是DP的决策:
在第\(i\)天,有这么几种决策方式:
第一种:不买。
第二种:买完第二天卖。
第三种:买完在手中存几天后再卖。
但是第三种决策完全可以转化成第二种决策,原理是这样的:
对于一只股票,我们在第\(i\)天买第\(j\)天卖,其效果可以被看为在第\(i\)天买,第\(k\)天卖(\(i\le k\le j\)),当天再买回来,第\(j\)天卖。
这样的话,我们的第三种决策就可以变成:买完第二天卖,第二天再买回来。这就解决了DP的无后效性的问题。我们就可以开始设计DP过程了。
根据上面的分析,我们发现买股票变成了相邻两天的事情。那么,每一天对于每种物品只有两种选择:买还是不买。
诶?好像完全背包欸!
那么,对于每一天,我们都做一次完全背包:这个背包的体积就是当前的资金,每个物品的体积是当天的价值,价值为当天的价值减去前一天的价值。
所以我们可以跑\(d-1\)次完全背包,选出答案最大的一次。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int s,d,m,maxx;
int map[60][20],dp[500001];
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",&map[i][j]);
for(int i=2;i<=d;i++)
{
maxx=-1;
memset(dp,0,sizeof(dp));
for(int j=1;j<=s;j++)
for(int k=map[j][i-1];k<=m;k++)
{
dp[k]=max(dp[k],dp[k-map[j][i-1]]+map[j][i]-map[j][i-1]);
maxx=max(maxx,dp[k]);
}
m+=maxx;
}
printf("%d",m);
return 0;
}
USACO Stock Market的更多相关文章
- USACO 2009 Feb 股票市场 Stock Market
USACO 2009 Feb 股票市场 Stock Market Description 尽管奶牛们天生谨慎,她们仍然在住房抵押信贷市场中大受打击,现在她们准备在股市 上碰碰运气.贝西开挂了,她知道S ...
- BZOJ 1578: [Usaco2009 Feb]Stock Market 股票市场( 背包dp )
我们假设每天买完第二天就卖掉( 不卖出也可以看作是卖出后再买入 ), 这样就是变成了一个完全背包问题了, 股票价格为体积, 第二天的股票价格 - 今天股票价格为价值.... 然后就一天一天dp... ...
- 1578: [Usaco2009 Feb]Stock Market 股票市场
1578: [Usaco2009 Feb]Stock Market 股票市场 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 414 Solved: 1 ...
- An Introduction to Stock Market Data Analysis with R (Part 1)
Around September of 2016 I wrote two articles on using Python for accessing, visualizing, and evalua ...
- (转) Using the latest advancements in AI to predict stock market movements
Using the latest advancements in AI to predict stock market movements 2019-01-13 21:31:18 This blog ...
- [bzoj1578][Usaco2009 Feb]Stock Market 股票市场_完全背包dp
Stock Market 股票市场 bzoj-1578 Usaco-2009 Feb 题目大意:给定一个$S\times D$的大矩阵$T$,其中$T[i][j]$表示第i支股票第j天的价格.给定初始 ...
- word Stock Market Indices
Stock Market Indices USA Africa Asia and Pacific Canada Europe Middle East South America Internation ...
- 股票市场问题(The Stock Market Problem)
Question: Let us suppose we have an array whose ith element gives the price of a share on the day i. ...
- 【BZOJ】1578: [Usaco2009 Feb]Stock Market 股票市场
[题意]给定s个股票和d天,给出价格矩阵s*d,每天可以买入或卖出整数倍股票,初始资金m,求最大利益.m<=200000,s<=50,d<=10. [算法]完全背包 [题解]关键在于 ...
随机推荐
- C# git忽略文件 (.gitignore )
# Visual Studio # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific fi ...
- DRF--序列化
为什么要用序列化 当我们做前后端分离的项目时,前后端交互一般都是JSON格式的数据,那么我们给前端的数据就要转为JSON格式,就需要我们拿到数据库后的数据进行序列化.在看DRF的序列化之前,先来看看d ...
- 机器学习之线性回归以及Logistic回归
1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...
- 机器学习之KNN
KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同.KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别.而KNN做回归时,一般是 ...
- 第02组 Beta冲刺(3/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践的报告 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估. ...
- VS2019 远程调试
碰到一个问题,在本机调试没有任何问题,部署到测试环境的CentOS 7 上,抛出异常.为解决这个问题,使用远程调试. 第一步,设置远程链接 第二步,Debug--Attach to Process ...
- Java连载37-面向对象的封装性
一.IDE上继续新建工程 1.在src目录下新建软件包:package机制后面再讲,目前先用着 2.给package命名一个名称:com.bjpowernode.java_learning 3.软件包 ...
- 入门理解mysql-binlog
mysql-binlog简介: mysql的二进制日志记录了所有DDL和DML(除select) 开启binlog日志后会有1%左右的的性能损耗 二进制日志包括两类 索引文件 XXXX.index 日 ...
- 【Java面试题】short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
昨天去面试,虽然体验不是很好, 但是看到了这个面试题,当时感觉无从下手,所以在这里记录一下. 解决这道题之前,先复习一下Java的基本数据类型转换规则,以便后面对面试题的理解. java的基本数据类型 ...
- kali渗透综合靶机(十四)--g0rmint靶机
kali渗透综合靶机(十四)--g0rmint靶机 靶机下载地址:https://www.vulnhub.com/entry/g0rmint-1,214/ 一.主机发现 1.netdiscover - ...