avatar
黑客rank Stock Maximize# JobHunting - 待字闺中
h*8
1
搞了一个下午,一直超时,难道复杂度可以比O(n^2)小么。请教各位了。感觉自己实在
是太菜了。
代码是依据以下的方程,a[N]是input
f[i] = max( max(for all j, 0(i-1)*a[i] - (a[1]+a[2]+...+a[i-1]) )
以下是代码
int main() {

int T;
#define RF
#ifdef RF
ifstream& in = ifstream("input.txt" , ios::in);
#else
istream& in = cin;
#endif
in>>T;
for(int t=0 ; tint N;
in>>N;
vector a(1,0);

vector cache(1 , 0);
int accu = 0;
for(int k=1 ; k<=N ; ++k) {
int t;
in>>t;
a.push_back(t);
accu += t;
cache.push_back(accu);
}


vector f(N+1 , 0);
f[1] = a[1]*(-1);

for(int i=2 ; i<=N ; i++){
int maxval = f[1];
int temp = cache[i-1]-a[1];
for(int j = 2 ; jtemp -= a[j];
maxval = max(maxval , f[j] + (i-1-j)*a[i] - temp);
}
maxval = max(maxval , (i-1)*a[i] - cache[i-1]);
f[i] = maxval;
}
if(f[N]<0) cout<<0<else cout<}
return 0;
}
avatar
m*1
2
这题我正好做过~
好像是O(nlogn)
idea 是这样,依据题意,假如第i天的股价最高,那么前 i-1天都是买, 第i天卖 赚
最多
好,处理完一次以后,前i个可以不看了,从i+1开始,再找从i+1到结尾 最大的最大股
价,重复操作直到 i = size of array -1;
建一个
struct day {
int value; //当天的股价
int id; // 第id天
}
对 value 进行 NlogN 的排序,
然后扫一遍 就Ok
avatar
m*1
3
部分程序
long long process (int * my,int start,int end,int curmax) {
long long sum = 0;
for(int i=start;isum += curmax - my[i];
return sum;
}
void solution ( int n) {
int a[n];
node mynode[n];
for(int i=0;icin >> a[i];
mynode[i].id = i;
mynode[i].value = a[i];
}

mergeSort(mynode,n);
int curmaxId = -1;
int curmax;
long long total = 0;
for(int i=0;iint id = mynode[i].id;
curmax = mynode[i].value;
if(id > curmaxId){
total += process(a,curmaxId+1,mynode[i].id,curmax);
curmaxId = id;
}

}
cout<< total <}
avatar
p*2
4
这题误导。放到dp里了,实际上是greedy
avatar
w*o
5
O(n)就可以了,不用sort
avatar
h*8
6
多谢回复,不过诚如二爷所说,这题是greedy。
你的思路也是greedy。
放在dp底下的确有点误导,待会重写个。

【在 m****1 的大作中提到】
: 这题我正好做过~
: 好像是O(nlogn)
: idea 是这样,依据题意,假如第i天的股价最高,那么前 i-1天都是买, 第i天卖 赚
: 最多
: 好,处理完一次以后,前i个可以不看了,从i+1开始,再找从i+1到结尾 最大的最大股
: 价,重复操作直到 i = size of array -1;
: 建一个
: struct day {
: int value; //当天的股价
: int id; // 第id天

avatar
m*1
7
对,倒过来扫就行~ O(n)
avatar
r*h
8
这题的思路和只能买卖一次求最大利润那一题完全一样
只是题目介绍容易把人唬住了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。