Pagini recente » Cod sursa (job #1706820) | Cod sursa (job #1378752) | Cod sursa (job #3237498) | Cod sursa (job #847390) | Cod sursa (job #1253055)
#include <fstream>
#include <cstring>
#define min(a,b) (((a)<=(b))?(a):(b))
#define In "energii.in"
#define Out "energii.out"
#define Smax 5000
#define Inf 0x3f3f3f3f
using namespace std;
int n,S;
int best[Smax+2];
///best[i] = costul minim necesar formarii sumei i
int main()
{
ifstream f(In);
memset(best,Inf,sizeof(best));
f>>n>>S;
int i,j,e,c;
for(i=1;i<=n;i++)
{
f>>e>>c;
for(j=S+e;j>e;j--)//vrem sa construim suma j
if(best[j-e]!=Inf)
{
if(j>S)
best[S] = min(best[S],best[j-e]+c);
else
best[j] = min(best[j],best[j-e]+c);
}
best[e] = min(best[e],c);
}
f.close();
ofstream g(Out);
g<<(best[S]==Inf?(-1):best[S])<<"\n";
g.close();
return 0;
}