Mai intai trebuie sa te autentifici.
Cod sursa(job #748638)
Utilizator | Data | 14 mai 2012 12:11:10 | |
---|---|---|---|
Problema | Energii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.47 kb |
#include<stdio.h>
#include<iostream>
using namespace std;
int energ[15001],g,w,lastvisit=0,mincost=-1; //comp -1
void isBetter(int x)
{
if(mincost==-1||mincost>x)
mincost=x;
return;
}
void afisare()
{
for(int i=1;i<=10;i++)
cout<<"energ["<<i<<"] = "<<energ[i]<<"\n";
cout<<"<...>\n";
}
void insert(int en,int cst)
{
/*int start;
if(lastvisit<en)
{
lastvisit=en;
start=en;
}
else
start=lastvisit;
if(lastvisit>w)
lastvisit=w;*/
int newen,newcost,i;
for(i=w-1; i>=1; i--)
{
if(energ[i]>-1)
{
newen=i+en;
newcost=energ[i]+cst;
if(newcost<energ[newen]||energ[newen]==-1)
{
energ[newen]=newcost;
if(newen>=w)
isBetter(newcost);
}
}
}
if(energ[en]>cst||energ[en]==-1)
{
newen=en;
newcost=cst;
energ[newen]=newcost;
if(newen>=w)
isBetter(newcost);
}
//afisare();
}
void initial()
{
for(int i=1; i<=15000; i++)
energ[i]=-1;
return;
}
int main()
{
FILE *in=fopen("energii.in","r"),*out=fopen("energii.out","w");
fscanf(in,"%d%d",&g,&w);
int e,cost;
initial();
for(int i=1; i<=g; i++)
{
fscanf(in,"%d%d",&e,&cost);
insert(e,cost);
}
fprintf(out,"%d\n",mincost);
return 0;
}