Cod sursa(job #767217)

Utilizator bratualexBratu Alexandru bratualex Data 12 iulie 2012 23:04:12
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
using namespace std;
ifstream fin ("energii.in");
ofstream fout ("energii.out");
struct energ {
int cost;
int productie;
};
int v[2][100009];
energ a[1200];
int main()
{
    int n,w,i,j,costmin=0,prd=0;
    long long costmax=0;
    fin>>n>>w;

    for (i=1;i<=n;i++)
    {
        fin>>a[i].productie>>a[i].cost;
        costmax+=a[i].cost;
        prd+=a[i].productie;
    }
    if (prd<=w)
    {
        if (prd==w)
            fout<<costmax;
        else
            fout<<-1;
    }
    else
    {
        costmin=costmax+1;
        for(i=1;i<=n;i++)
        {
            for(j=0;j<=costmax;j++)
            {
                if (j>=a[i].cost)
                {
                    v[i%2][j]=max(v[!(i%2)][j],v[!(i%2)][j-a[i].cost]+a[i].productie);
                    if (j<costmin && v[i%2][j]>=w )
                        costmin=j;
                }
                else
                    v[i%2][j]=v[!(i%2)][j];
            }
        //for(j=0;j<=w;j++)
          //  v[0][j]=v[1][j];
        }
        fout<<costmin;
    }
    return 0;
}