求助!WA两个点
查看原帖
求助!WA两个点
432126
s_cenxinyang楼主2022/3/26 19:58

代码如下

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct h
{
	ll v,w,d;
}a[10001];
struct qh
{
	ll x,y,z;
}b[11];
int r()
{
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
    return x*f;
}
ll n,m,c,dp[10001],qu[1001],que[10001];
int main()
{
	n=r(),m=r(),c=r();
	for(ll i=1;i<=n;++i)
	  a[i].v=r(),a[i].w=r(),a[i].d=r();
	for(ll i=1;i<=n;++i)
	  for(ll j=0;j<a[i].v;++j)
	  {
	  	ll h=0,t=0;
	  	for(ll k=0;k*a[i].v+j<=c;++k)
	  	{
	  		ll l=dp[k*a[i].v+j]-k*a[i].w;
	  		if(t>h&&qu[t-1]<l)
	  		  --t;
	  		que[t]=k;qu[t++]=l;
	  		if(que[h]+a[i].d<k)
	  		  ++h;
	  		dp[k*a[i].v+j]=qu[h]+k*a[i].w;
		}
	  }
	for(ll i=1;i<=m;++i)
	  b[i].x=r(),b[i].y=r(),b[i].z=r();
	for(ll i=1;i<=m;++i)
	  for(ll j=c;j>=0;--j)
	    for(ll k=0;k<=j;++k)
	      dp[j]=max(dp[j],dp[j-k]+b[i].x*k*k+b[i].y*k+b[i].z);
	cout<<dp[c];
}
2022/3/26 19:58
加载中...