1 solutions

  • 0
    @ 2025-11-5 18:41:47

    C++ :

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N(16*60/5+5),M(30);  //M:池塘上界  N:单位时间上界 
    int tim[M],t[M],first[M],d[M],f[M][N],ans(0);
    int main()
    {
    //    ifstream cin("fish.in");
    //    ofstream cout("fish.out");
        int h,n;
        cin>>n>>h;
        h=h*60/5;
        for (int i=1;i<=n;i++) cin>>first[i];
        for (int i=1;i<=n;i++) cin>>d[i]; 
        t[0]=0;
        for (int i=1;i<n;i++) { cin>>tim[i];  t[i]=t[i-1]+tim[i]; }  
        memset(f,0,sizeof(f));
        for (int j=1;j<=h;j++)
            if (first[1]-(j-1)*d[1])
                 f[1][j]=first[1]*j-j*(j-1)*d[1]/2;
            else f[1][j]=f[1][j-1]; 
        ans=f[1][h];       
        for (int i=2;i<=n;i++)
            for (int j=t[i-1]+1;j<=h;j++)
            {
                f[i][j]=f[i-1][j-tim[i-1]];
                for (int k=1;k<=j-t[i-1]&&first[i]-(k-1)*d[i]>0;k++)                
                        f[i][j]=max(f[i][j],f[i-1][j-tim[i-1]-k]+k*first[i]-k*(k-1)/2*d[i]);                            
                ans=max(ans,f[i][j]);
            }
        cout<<ans<<endl;
        return 0;
    }
    
    
    • 1

    Information

    ID
    18993
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By