Cod sursa(job #1744090)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 19 august 2016 12:01:34
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <algorithm>
#define MAXN 2000
struct Client{
    int timp;
    int pret;
};
Client V[MAXN+1];
bool cmp(Client a,Client b){
   return a.timp<b.timp;
}
int profit[MAXN+1],start[MAXN+1];
int main(){
   FILE*fi,*fout;
   int i,n,c,j,x,max_profit;
   fi=fopen("carnati.in" ,"r");
   fout=fopen("carnati.out" ,"w");
   fscanf(fi,"%d %d " ,&n,&c);
   for(i=1;i<=n;i++)
      fscanf(fi,"%d %d " ,&V[i].timp,&V[i].pret);
   std::sort(V+1,V+n+1,cmp);
   max_profit=0;
   for(i=1;i<=n;i++){
      for(j=1;j<=n;j++){
         x=0;
         if(V[j].pret>=V[i].pret)
           x=V[i].pret;
         if(profit[j-1]-(V[j].timp-start[j-1]+1)*c+x>x-c){
            profit[j]=profit[j-1]+x;
            start[j]=start[j-1];
         }
         else{
            profit[j]=x;
            start[j]=V[j].timp;
         }
         if(max_profit<profit[j]-(V[j].timp-start[j]+1)*c)
           max_profit=profit[j]-(V[j].timp-start[j]+1)*c;
      }
   }
   fprintf(fout,"%d" ,max_profit);
   fclose(fi);
   fclose(fout);
   return 0;
}