动态规划算法实现收益最大C++

#include
using namespace std;
typedef struct
{
    float benefit;
    int A,B,C;
}Allot;
void AddChoice(Allot *Fx,float **temp,int stage,int n,float *fx[4])
{
    int i,j;
    for(i=0;i<=n;i++)
        for(j=0;j<=i;j++)
            temp[i][j]=fx[stage][j]+Fx[i-j].benefit;
}
void Updata(Allot *Fx,Allot *fore,int stage,int i,int j,int n)
{
    int t;
    if(stage==2)
    {
        Fx[i].B=j;Fx[i].A=i-j;Fx[i].C=0;
    }
    else if(stage==3)
    {
        Fx[i].C=j;
        t=i-j;
        Fx[i].A=fore[t].A;Fx[i].B=fore[t].B;
    }
}
void Findmax(Allot *Fx,float **temp,int stage,int n)
{
    int i,j,pos,t;
    Allot fore[n+1];
    for(t=0;t<=n;t++)
        fore[t]=Fx[t];
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(temp[i][j]>=Fx[i].benefit)
            {
                Fx[i].benefit=temp[i][j];
                pos=j;
            }
        }
        Updata(Fx,fore,stage,i,pos,n);
    }
}
int main()
{
    Allot *Fx;
    char project='A';
    float *fx[4],**temp;
    int n,i,j,fund;
    cout<<"输入一个项目最多分配的资金:";
    cin>>n;
    for(i=0;i<=3;i++)
        fx[i]=new float[n+1];
    cout<<"输入三个项目的投资效益(以0开始):"<    for(i=1;i<=3;i++)
    {
        cout<<"项目"<        for(j=0;j<=n;j++)
            cin>>fx[i][j];
    }
    Fx=new Allot[n+1];
    for(i=0;i<=n;i++)
    {
        Fx[i].benefit=fx[1][i];Fx[i].A=i;Fx[i].B=Fx[i].C=0;
    }
    temp=new float *[n+1];
    for(i=0;i<=n;i++)
        temp[i]=new float[n+1];
    for(i=2;i<=3;i++)
    {
        AddChoice(Fx,temp,i,n,fx);
        Findmax(Fx,temp,i,n);
    }
    cout<<"\n请输入投资金额:";
    cin>>fund;
    cout<<"最大收益为:"<    return 0;
}

你可能感兴趣的:(动态规划算法实现收益最大C++)