Cod sursa(job #1503074)

Utilizator Andrei_PopaAndreiCDG Andrei_Popa Data 15 octombrie 2015 15:40:43
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
int v[3][5001];
int En[1001];
int Cost[1001];
int sInf;
int G,W;
int cmin1;
bool excesiv=false;
int main()
{
    int i,j;
    f>>G>>W;
    for(i=1;i<=G;i++)
    {
        f>>En[i]>>Cost[i];
        sInf+=Cost[i];
    }

    for(i=1;i<=W;i++)
    v[1][i]=sInf+1;

    int cmin1=sInf+1;
    v[2][0]=1;
    int gmax1;
    gmax1=0;
    int gmax11;
    for(i=1;i<=G;i++)
    {

        gmax11=gmax1;
        for(j=gmax1;j>=0;j--)
        if(v[2][j]!=0)
        {
            if(j+En[i]<=W)
            {
              if(j+En[i]>gmax11)
              gmax11=j+En[i];

              if(v[1][j]+Cost[i]<v[1][j+En[i]])
              {
                  v[1][j+En[i]]=v[1][j]+Cost[i];
                  v[2][j+En[i]]=1;
              }
            }
            else{
            excesiv=true;
            if(v[1][j]+Cost[i]<cmin1)
            cmin1=v[1][j]+Cost[i];}
        }
        gmax1=gmax11;
    }
   cmin1=min(cmin1,v[1][W]);
   if(excesiv==false && v[2][W]==0)
   g<<"-1";
   else
   g<<cmin1;
    /*for(i=1;i<=W;i++)
    g<<v[1][i]<<' ';*/
    f.close();
    g.close();
    return 0;
}