Cod sursa(job #879630)

Utilizator ard_procesoareLupicu ard_procesoare Data 15 februarie 2013 18:07:50
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
using namespace std;
ifstream fin("energii.in");
#define NMAX 1005
#define NMAX2 11000000
ofstream fout("energii.out");
int n,W,profit[NMAX2],sum,sum2;
struct data{
    int power,cost;
};
data v[NMAX];
void read()
{
    int i;
    fin>>n>>W;
    for(i=1;i<=n;i++)
    {
        fin>>v[i].power>>v[i].cost;
        sum+=v[i].cost;
        sum2+=v[i].power;
    }
}
int main()
{
    read();
    if(sum2<W)
    {
        fout<<-1;
        return 0;
    }
    int i,j,poz=sum;
    for(i=1;i<=n;i++)
    {
        for(j=poz;j;j--)
        {
            if(profit[j] && profit[j]+v[i].power > profit[j+v[i].cost])
            {
                profit[j+v[i].cost] = profit[j] + v[i].power;
                if(profit[j+v[i].cost] >= W)
                    if(poz==0 || poz>j+v[i].cost)
                        poz= j+v[i].cost;
            }
        }
        if(v[i].power > profit[v[i].cost])
        {
            profit[v[i].cost] = v[i].power;
            if(profit[v[i].cost] >= W)
                if(poz==0 || poz>v[i].cost)
                        poz=v[i].cost;
        }
    }
    for(i=1;i<=NMAX2;i++)
    {
        //fout<<profit[i]<<endl;
        //fout<<W;
        if(profit[i]>=W)
        {
            fout<<i;
            return 0;
        }
    }
}