Pagini recente » Cod sursa (job #140465) | Cod sursa (job #278264) | Cod sursa (job #1828925) | Cod sursa (job #690384) | Cod sursa (job #940288)
Cod sursa(job #940288)
#include <fstream>
#include <cstring>
#define min(a,b) (((a)<=(b))?(a):(b))
#define max(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));
best[0] = 0;
f>>n>>S;
int i,j,e,c,maxx,minm,ult=0;
for(i=1;i<=n;i++)
{
f>>e>>c;
maxx = ult;
for(j=ult;j>=0;j--)
if(best[j]!=Inf)//daca putem forma suma j
{
minm = min(S,j+e);
best[minm] = min(best[minm],best[j]+c);;
maxx = max(ult,minm);
}
ult = maxx;
}
f.close();
ofstream g(Out);
g<<(best[S]==Inf?(-1):best[S])<<"\n";
g.close();
return 0;
}