1 条题解

  • 0
    @ 2025-9-10 9:12:36

    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

    信息

    ID
    3969
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者