Pagini recente » Cod sursa (job #1481906) | Cod sursa (job #3248558) | Cod sursa (job #2789900) | Cod sursa (job #3163295) | Cod sursa (job #2162980)
#include <cstdio>
#include <algorithm>
using namespace std;
pair<int,int> q[1030];
int d[600],R,r[600],f[600];
char vaz[600];
void update(int poz)
{
for(int i=R-r[poz];i>=0;i--)
d[i+r[poz]]=max(d[i+r[poz]],d[i]+f[poz]);
}
int main()
{
freopen("praslea.in","r",stdin);
freopen("praslea.out","w",stdout);
int l=0,x,y,n;
scanf("%d%d",&n,&R);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&x,&y,&f[i],&r[i]);
q[++l]={x,i};
q[++l]={y+1,-i};
}
sort(q+1,q+l+1);
q[0]=q[1];
long long sol=0;
int poz1=0,poz=1,val=0;
while(poz<=l)
{
sol+=1LL*val*(q[poz].first-poz1);
poz1=q[poz].first;
int lim=poz+1;
while(lim<=l && q[lim].first==q[poz].first) lim++;
lim--;
int p=0;
for(;poz<=lim;poz++)
if(q[poz].second<0) vaz[-q[poz].second]=0,p=1;
else break;
if(p==1)
{
for(int i=0;i<=R;i++) d[i]=0;
for(int i=1;i<=n;i++)
if(vaz[i]==1) update(i);
}
for(;poz<=lim;poz++)
{
update(q[poz].second);
vaz[q[poz].second]=1;
}
val=0;
for(int i=0;i<=R;i++) val=max(val,d[i]);
}
printf("%lld",sol);
return 0;
}