Cod sursa(job #767181)

Utilizator bratualexBratu Alexandru bratualex Data 12 iulie 2012 22:13:35
Problema Energii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
ifstream fin ("energii.in");
ofstream fout ("energii.out");
struct energ {
int cost;
int productie;
};
int v[1000][2000];
energ a[2000];
int main()
{
    int n,w,i,costmax=0,j,costmin=0,prd=0,dif=10000;
    fin>>n>>w;

    for (i=1;i<=n;i++)
    {
        fin>>a[i].productie>>a[i].cost;
        costmax=a[i].cost+costmax;
        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][j]=max(v[i-1][j],v[i-1][j-a[i].cost]+a[i].productie);

                    /*if ( v[i][j]-w<dif && w<=v[i][j] )
                    {
                        dif=v[i][j]-w;

                        //if (j<costmin)
                            costmin=j;
                    }
                    else
                        if (v[i][j]-w==dif)
                            if (j<costmin)
                                costmin=j;
                    */
                    if (j<costmin && v[i][j]>=w )
                        costmin=j;
                }
                else
                    v[i][j]=v[i-1][j];
            }

        //for(j=0;j<=w;j++)
          //  v[0][j]=v[1][j];
        }
        fout<<costmin;
    }
    return 0;
}