Cod sursa(job #997357)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 13 septembrie 2013 21:27:25
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <algorithm>

using namespace std;

int maxim(int a,int b)
{
    if(a>b)
       return a;
    return b;   
}

struct elem
{
   int t;
   int p;
}v[2005];

bool operator<(const elem &a,const elem &b)
{
   if(a.t<=b.t)
      return 1;
   return 0;     
} 

int main()
{
    ifstream cin("carnati.in");
    ofstream cout("carnati.out");
    
    int n=0,c,i,j,din[2005],maximul=0;
    cin>>n>>c;
    for(i=0;i<n;i++)
       cin>>v[i].t>>v[i].p;
    sort(v,v+n);
    for(i=0;i<n;i++)
    {
       din[n-1]=(v[n-1].p>=v[i].p)*v[i].p-c;             
       if(din[n-1]>maximul)
          maximul=din[n-1];
       for(j=n-2;j>=0;j--)
       {
          din[j]=(v[j].p>=v[i].p)*v[i].p+maxim(-c,din[j+1]-c*(v[j+1].t-v[j].t));      
          if(din[j]>maximul)
             maximul=din[j];
       }
    }
    cout<<maximul<<'\n';
    cin.close();
    cout.close();
    //system("PAUSE");
    return 0;
}