Cod sursa(job #940288)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 15 aprilie 2013 23:10:42
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#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;
}