用户:
SCS_user_EHQ0z2l6el查看:0 回复:0 评论:0 创建时间:2023-04-20T21:14:53
题目是:
假设阿福已经准确预测出了某只股票在未来N天的价格,他希望买卖两次,使得获得的利润最高。为了计算简单起见,利润的计算方式为卖出的价格减去买入的价格。
同一天可以进行多次买卖。但是在第一次买入之后,必须要先卖出,然后才可以第二次买入。
现在,阿福想知道他最多可以获得多少利润。
我推出的状态转移方程是
f(m,n)=
0(m=0,n>0)
max(f(m-1,n-1)-price[n-1],f(m,n-1));
(1<=m<=4,n>1,m为奇数)
max(f(m-1,n-1)+price[n-1],f(m,n-1));
(1<=m<=4,n>1,m为偶数)
结果结果错了,请帮忙看看问题在哪?
#include<iostream>
using namespace std;
const int Maxmemory=10000;
//数组空间
const int NumberOfTrades=2;
//交易次数
int resulttable[Maxmemory];
//记录数据
int Maxpf(int prices[],int n){
if(n==0)return 0;
int m=NumberOfTrades*2+1;
resulttable[1]=-prices[0];
resulttable[3]=-prices[0];
//填充初始状态
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
if((j&1)==1)//判断j为奇数的情况
resulttable[j]=max(resulttable[j],resulttable[j-1]-prices[j]);
else
resulttable[j]=max(resulttable[j],resulttable[j-1]+prices[j]);
return resulttable[m-1];
}
int main(){
int a[Maxmemory],n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cout<<Maxpf(a,n);
return 0;
}