Nu aveti permisiuni pentru a descarca fisierul grader_test1.in
Cod sursa(job #138839)
Utilizator | Data | 19 februarie 2008 12:28:17 | |
---|---|---|---|
Problema | Carnati | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.77 kb |
#include<stdio.h>
#include<algorithm>
using namespace std;
struct magazin{
int max,p,cump;
};
magazin mag[2010];
pair <int, int> nr[2010];
int main(){
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
int n,c,maxim,i,j;
scanf("%d%d",&n,&c);
for(i=0;i<n;++i)
scanf("%d%d",&nr[i].first,&nr[i].second);
maxim=-1000000000;
sort(nr,nr+n);
for(i=0;i<n;++i){
mag[i].max=nr[i].second-c;
mag[i].p=nr[i].second;
mag[i].cump=1;
if(mag[i].max>maxim)
maxim=mag[i].max;
for(j=i-1;j>=0;--j){
if(nr[i].second>mag[j].p){
if(mag[j].max+mag[j].p-c*(nr[i].first-nr[j].first+1)>mag[i].max){
mag[i].max=mag[j].max+mag[j].p-c*(nr[i].first-nr[j].first+1);
if(mag[j].cump>1)
mag[i].max+=c;
mag[i].cump=mag[j].cump+1;
mag[i].p=mag[j].p;
}
}
else{
if(mag[j].max+nr[i].second-c*(nr[i].first-nr[j].first+1)-mag[j].cump*(mag[j].p-nr[i].second)>mag[i].max){
mag[i].max=mag[j].p+nr[i].second-c*(nr[i].first-nr[j].first+1)-mag[j].cump*(mag[j].p-nr[i].second);
mag[i].p=nr[i].second;
if(mag[j].cump>1)
mag[i].max+=c;
mag[i].cump=mag[j].cump+1;
}
}
if(mag[i].max>maxim)
maxim=mag[i].max;
}
}
if(maxim<0)
printf("0\n");
else
printf("%d\n",maxim);
fclose(stdin);
fclose(stdout);
return 0;
}