Pagini recente » Cod sursa (job #2933951) | Cod sursa (job #636870) | Cod sursa (job #2492338) | Cod sursa (job #1650929) | Cod sursa (job #659400)
Cod sursa(job #659400)
Utilizator |
romario s8ko14 |
Data |
10 ianuarie 2012 16:51:34 |
Problema |
Gutui |
Scor |
0 |
Compilator |
cpp |
Status |
done |
Runda |
teme_upb |
Marime |
1.61 kb |
#include<stdio.h>
int n,in_max,ridicare,s=0,ok=0,ok2=0,ok3=0,smax=-1;
struct fruct
{
int inaltime;
int greutate;
};
fruct a[100000],copie[100000],b[100000];
int back(int k)
{//SA REINITIALIZEZ OK!
for(int i=0;i<n;i++)
if(copie[i].inaltime>0)
{
ok2=0;
b[k].inaltime=copie[i].inaltime; b[k].greutate=copie[i].greutate;
for(int j=0;j<=k;j++)//bun
if(b[j].inaltime+ridicare==b[k].inaltime && b[j].greutate==b[k].greutate)
{ ok2=1; break; }
ok=0;
if(ok2==0)//daca este bun
{
for(int j=0;j<n;j++)//ridic gutile
{
if(copie[j].inaltime!=-1)
copie[j].inaltime=copie[j].inaltime+ridicare;
if(copie[j].inaltime>in_max)
copie[j].inaltime=-1;
}
for(int j=0;j<n;j++)//solutie
if(copie[j].inaltime>0)//daca nu e solutie
{ back(k+1); ok=1;}//ma duc in back(k+1)
if(ok==0)//daca e solutie
{
for(int j=0;j<=k;j++)
s=s+copie[j].greutate;
for(int i=0;i<n;i++)
{ copie[i].inaltime=a[i].inaltime; copie[i].greutate=a[i].greutate; }//reactualizez copia lui a
for(int j=0;j<n;j++)//ridic gutile
{
if(copie[j].inaltime!=-1)
copie[j].inaltime=copie[j].inaltime+ridicare*k;
if(copie[j].inaltime>in_max)
copie[j].inaltime=-1;
}
if(s>smax)
smax=s;
}
}
}
}
int main()
{
FILE *f=fopen("gutui.in","rt");
fscanf(f,"%i%i%i",&n,&in_max,&ridicare);
for(int i=0;i<n;i++)
fscanf(f,"%i%i",&a[i].inaltime,&a[i].greutate);
for(int i=0;i<n;i++)
{ copie[i].inaltime=a[i].inaltime; copie[i].greutate=a[i].greutate; }
back(0);
printf("%i",smax);
}