猫史档案馆


dp代码,结果是错的,求助

用户:SCS_user_EHQ0z2l6elSCS_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;
}


回复

上一页1 页 / 共 0下一页