You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# include <bits/stdc++.h>
using namespace std ;
const int N = 1e5 + 10 ;
const int INF = 0x3f3f3f3f ;
int n ;
int w [ N ] ;
int f [ N ] [ 2 ] ; //考虑前i天的股市, 第i天的手中股票状态为j(j=0 未持股, j=1 持股)
int main ( ) {
cin > > n ;
for ( int i = 1 ; i < = n ; i + + ) cin > > w [ i ] ;
/**
因为f[0][1]代表考虑前0天, 状态是已经买入, 这是一个不合法状态。(一般不合法的状态设置为INF或者-INF, 要看取最大值或最小值)
第一次买入至少是在第1天。
如果不把它初始化为负无穷, f[1][0]就会更新成f[0][1] + w[1], 也就是w[1]
但是f[1][0]实际意义是第 1 天不买入股票,那么收益就是 0, 而不是w[i]
*/
f [ 0 ] [ 1 ] = - INF ;
for ( int i = 1 ; i < = n ; i + + ) {
f [ i ] [ 0 ] = max ( f [ i - 1 ] [ 0 ] , f [ i - 1 ] [ 1 ] + w [ i ] ) ;
f [ i ] [ 1 ] = max ( f [ i - 1 ] [ 1 ] , f [ i - 1 ] [ 0 ] - w [ i ] ) ;
}
printf ( " %d \n " , f [ n ] [ 0 ] ) ;
return 0 ;
}