Cod sursa(job #70867)

Utilizator alex23alexandru andronache alex23 Data 8 iulie 2007 11:52:59
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
//#include <conio.h>

int i,j,k,g,w,x,y,a[1000],b[1000],min,st[1000];

void init() {st[k]=-1;}
int Am_Succ()
  { if (st[k]<2)
	  {st[k]++;
	   return 1;
	   }
	else return 0;
  }

int E_Valid()
  { return 1;
  }

int solutie()
  {if (k==x) return 1;
	else return 0;
  }

void tipar()
  {int i,s=0,p=0;
   for (i=1;i<=x;i++)
     {s+=a[i]*st[i];
      p+=b[i]*st[i];
      }
   if ((s>=w) && (p<min)) min=p;
   }

void back()
  {int as,i;
   k=1;
   while (k>0)
      {do {} while ((as=Am_Succ()) && !E_Valid());
       if (as)
	   if (solutie()) tipar();
		     else {k++;init();}
	else k--;
      }
  }



int main()
{
FILE *fin,*fout;

//clrscr();

fin=fopen("energii.in","r");
fscanf(fin,"%d",&g);
fscanf(fin,"%d",&w);

for (i=1;i<=g;i++)
  {fscanf(fin,"%d",&x);
   fscanf(fin,"%d",&y);
   j=1;
   while ((j<=i-1) && (a[j]<x)) j++;
   for (k=i-1;k>=j;k--)
     {a[k+1]=a[k];
      b[k+1]=b[k];
      }
   a[j]=x;
   b[j]=y;
   }

fclose(fin);

/*
for (i=1;i<=g;i++)
  printf("%d ",a[i]);
printf("\n");
for (i=1;i<=g;i++)
  printf("%d ",b[i]);
printf("\n");
*/


i=1;
while ((i<=g) && (a[i]<w)) i++;
x=i-1;

min=b[x+1];
for (i=x+1;i<=g;i++)
  if (min>b[i]) min=b[i];

//printf("%d %d",k,min);

back();
//printf("%d",min);
fout=fopen("energii.out","w");
fprintf(fout,"%d",min);
fclose(fout);
return 1;

}