逆向思维Stock Maximize
题目描述:
这个题的意思是:
给出一段时间内 某个股票的每天的价格
每天可以进行的操作有:买一股,卖掉所有股,不作为
问在给定的序列里怎样让价值最大
数据规模:
每组数据包含case数 T(<=10)
每个case中 股票的天数n(<=50000)
每个股票的价格vi(1<=vi<=100000)
弱智思路:
本人的弱智思路是这样的,因为这一个题目被分在了dp分类之中,于是各种蛋疼,dp[i]表示在第i天能达到的最大价值,于是有转移方程:
dp[i] = dp[j]+v[i]*(i-j+1)-从i-j的股票价格之和(j从0到i)
然后悠然自得地写了如下代码交了:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; const int MAXN = ; int a[MAXN];
long long dp[MAXN];
int n; void input(){
cin>>n;
for ( int i = ; i <= n; i++ ){
cin>>a[i];
}
memset(,sizeof(dp),);
} long long MAX( long long a, long long b ){
return a > b ? a : b ;
} void solve(){
for ( int i = ; i <= n; i++ ){
long long v = ;
dp[i] = dp[i-];
if ( a[i] > a[i-] ){
for ( int j = i-; j >= ; j-- ){
v += a[j];
dp[i] = MAX(dp[i],dp[j]-v+a[i]*(i-j));
}
}
}
cout<<dp[n]<<endl;
} void deal(){
int t;
cin>>t;
while ( t-- ){
input();
solve();
} } int main() {
deal();
return ;
}
弱爆了
然后就超时了
思考了好几天状态压缩的DP,还是各种WA,无奈之下做了伸手党要来了Lazy的代码:
#include <cstdio>
using namespace std; const int MAXN = + ; int N;
int p[MAXN]; void input() {
scanf("%d", &N);
for (int i=; i<N; ++i) {
scanf("%d", &p[i]);
}
} void solve() {
long long rev = ;
int max_p = p[N-];
for (int i=N-; i>=; --i) {
if (p[i] < max_p) {
rev += max_p - p[i];
} else {
max_p = p[i];
}
} printf("%lld\n", rev);
} int main() {
int t;
scanf("%d", &t);
for (int i=; i<t; ++i) {
input();
solve();
}
}
快捷回复给:转身/;!孤单
碉堡了
然后恍然大悟:
这题目实际上是一个贪心,最后的价格最大就可以保证总价值最大,因此从后往前扫,并且更新max_p的值。最后输出结果
反省一下:
在思考这个题目的时候上述规律我也是发现了的,但是没有犯过头来倒着想,对编码和思考带来了很大的难度,最后还是失败了。以后思维还是灵活一点比较好.
gg~~
逆向思维Stock Maximize的更多相关文章
- HackerRank# Stock Maximize
		
原题地址 不知道为什么要用动态规划做,明明是扫几遍就行了啊 HackerRank上的题目特别喜欢long long类型啊,不用就爆.. 代码: #include <cmath> #incl ...
 - Introduction to Financial Management
		
Recently,i am learning some useful things about financial management by reading <Essentials of Co ...
 - LeetCode_Best Time to Buy and Sell Stock III
		
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
 - Leetcode - 309. Best Time to Buy and Sell Stock with Cooldown
		
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
 - zoj 2921  Stock(贪心)
		
Optiver sponsored problem. After years of hard work Optiver has developed a mathematical model that ...
 - USACO Stock Market
		
洛谷 P2938 [USACO09FEB]股票市场Stock Market 洛谷传送门 JDOJ 2625: USACO 2009 Feb Gold 2.Stock Market JDOJ传送门 题目 ...
 - Leetcode No.121 Best Time to Buy and Sell Stock(c++实现)
		
1. 题目 1.1 英文题目 You are given an array prices where prices[i] is the price of a given stock on the it ...
 - 【leetcode】121. Best Time to Buy and Sell Stock(股票问题)
		
You are given an array prices where prices[i] is the price of a given stock on the ith day. You want ...
 - [LeetCode] Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
		
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
 
随机推荐
- Android(java)学习笔记234: 服务(service)之音乐播放器
			
1.我们播放音乐,希望在后台长期运行,不希望因为内存不足等等原因,从而导致被gc回收,音乐播放终止,所以我们这里使用服务Service创建一个音乐播放器. 2.创建一个音乐播放器项目(使用服务) (1 ...
 - sed 批量替换多个文件里的某个字符/串
			
提示: 国际惯例使用前先备份 sed -i "s/a/b/g" `grep 'a' -rl ./`
 - Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比
			
四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用. Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所 ...
 - mac 卸载java
			
由于电脑上的jdk版本和项目组使用的版本不一致,因此需要卸载,但是作为一个新人小白加没有使用mac的过多经验,还是稍微费了一些些功夫的,从网上查的资料,终于解决这个问题,因此记录一下. 参考博客:ht ...
 - Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)
			
Python开发[第七篇]:面向对象 详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)> ...
 - Mysql 中和同to_char 一样用法的函数
			
STR_TO_DATE() $sql = " SELECT "; $sql .= " m_img,m_content,STR_TO_DATE(m_time,\" ...
 - Linux 网络配置(固定IP)
			
通常linux作为服务器系统时,是不推荐安装图形界面的,因此我们需要掌握非图形界面下如何配置网络,主要两种方式,如下: 一.使用SETUP工具(redhat系列才可以,推荐此修改方式) 1.在命令行直 ...
 - Delphi 封装Frame到Dll文件
			
做项目的时候,发现这个Frame很好用,为了省空间.调用和修改方便,就将Frame封装到dll(动态链接库)里面,确实很好使. 效果图如下: 上图是临时测试用的,忘了将Frame的align设置成al ...
 - 安卓自写Adapter
			
代码: package com.example.ouradapter; import android.app.ListActivity; import android.content.Context; ...
 - sql注释
			
一般使用数据库客户端软件是navicat,上面写sql用的注释符号一般是“#”或者“/* */”,比如: #我是注释 /*我是注释*/ 记得之前看别人sql里用“--”作为注释符号,结果我今天也试了一 ...