80pts求助
查看原帖
80pts求助
464732
luqyou楼主2022/10/19 21:44
#include<bits/stdc++.h>
using namespace std;
long long n,m,C;
long long v1,w1,d1,y;
long long v2,w2; 
long long a,b,c,z;
long long dp[10001];
int main()
{
    scanf("%lld%lld%lld",&n,&m,&C);
    long long i,j,k,l;
    for(i=1;i<=n;i++)
    {
        scanf("%lld%lld%lld",&v1,&w1,&d1);
        if(d1>=C/v1) 
        {
            for(j=v1;j<=C;j++)
                dp[j]=max(dp[j],dp[j-v1]+w1);
        }
        else
        {
            k=1;
            while(d1>k)
            {
                d1-=k;
                v2=v1*k;
                w2=w1*k;
                k*=2;
                for(j=C;j>=v2;j--)
                    dp[j]=max(dp[j],dp[j-v2]+w2);
            }
            if(d1>0)
            {
                v2=d1*v1;
                w2=d1*w1;
                for(j=C;j>=v2;j--)
                    dp[j]=max(dp[j],dp[j-v2]+w2);
            }
        }
    }   
    for(i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&a,&b,&c);
        z=-(b/(2*a));
        for(j=C;j>=0;j--)
            for(l=1;l<=j;l++)
            {
                if(a<0&&z>0&&l>z+1)
                    break;
                if(a>0&&z>0&&l>z&&l<2*z)
                    l=2*z; 
                y=a*l*l+b*l+c;
                dp[j]=max(dp[j],dp[j-l]+y);
            }
    }
    printf("%lld",dp[C]);
    return 0;
}
2022/10/19 21:44
加载中...