Cod sursa(job #67712)

Utilizator coderninuHasna Robert coderninu Data 25 iunie 2007 13:34:24
Problema Branza Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasa a 10-a Marime 0.84 kb
#include <stdio.h>
#define infile "branza.in"
#define outfile "branza.out"
#define min(x,y) (x)<(y)?(x):(y)
#define nmax 100000

long n, t, i, c[nmax], p[nmax], rez[nmax];
int s;

void readdata()
{
 FILE *fin=fopen(infile, "r");
 fscanf(fin, "%ld %d %ld\n", &n, &s, &t);
 for (i=1; i<=n; i++)
     fscanf(fin, "%ld %ld", &c[i], &p[i]);
 fclose(fin);
}

void writedata()
{
 FILE *fout=fopen(outfile, "w");
 fprintf(fout, "%ld", rez[n]);
 fclose(fout);
}

void solve()
{
 long minim, j, temp;
 rez[1]=c[1]*p[1];
 for (i=2; i<=n; i++)
     {
      minim=0;
      for (j=1; j<=t && i-j>0; j++)
	  {
	   temp=c[i-j]*p[i]+p[i]*s*(j);
	   if (minim==0 || temp<minim) minim=temp;
	  }
      rez[i]=min(minim,c[i]*p[i]);
      rez[i]+=rez[i-1];
     }
}

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}