Cod sursa(job #1739662)

Utilizator leraValeria lera Data 9 august 2016 22:34:41
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
#define NMAX 100000
long long d[5002];
int main()
{
    int G,W,i,w;
    pair<int,int>p[1002];
    fin>>G>>W;//Generatoare,energia necesara
    for(i=1;i<=G;i++)
        fin>>p[i].first>>p[i].second;//energia,costul
    for(i=1;i<=G;i++)
        {
            for(w=W;w>=1;w--)
            if(w>=p[i].first)
                {
                    if(d[w]==0)
                        {
                            if(d[w+1]==0 && d[w-p[i].first]!=0)
                                d[w]=d[w-p[i].first]+p[i].second;
                            else
                                if(d[w-p[i].first]==0 && d[w+1]!=0)
                                d[w]=d[w+1];
                            else
                                if(d[w-p[i].first]!=0 && d[w+1]!=0)
                                    d[w]=min(d[w-p[i].first]+p[i].second,d[w+1]);
                        }
                    else
                    {
                        if(d[w+1]!=0 && d[w+1]<d[w])
                            d[w]=d[w+1];
                        if(d[w]>d[w-p[i].first]+p[i].second && d[w-p[i].first]!=0)
                            d[w]=d[w-p[i].first]+p[i].second;
                    }
                }
            else
                {
                    if(d[w]==0)
                        d[w]=d[w+1];
                    else
                    if(d[w+1]<d[w] && d[w+1]!=0 && d[w]!=0)
                    d[w]=d[w+1];

                }
        }
    if(d[W]!=0)
    fout<<d[W];
    else
        fout<<-1;
    return 0;
}