Cod sursa(job #2659350)

Utilizator alexandrapopoiuAlexandra Popoiu alexandrapopoiu Data 16 octombrie 2020 17:13:04
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <stdio.h>
using namespace std;
struct alex{
int e,p;
}v[1002];
int suma[15003];
int main()
{
    FILE *fin,*fout;
    int G,W,pozmax,i,j,k,max;
    fin=fopen("energii.in","r");
    fout=fopen("energii.out","w");
    fscanf(fin,"%d%d",&G,&W);
    for(i=1;i<=G;i++){
        fscanf(fin,"%d%d",&v[i].e,&v[i].p);
        if(v[i].e>max)
            max=v[i].e;

    }
    pozmax=v[1].e;
    suma[v[1].e]=v[1].p;
    for(i=2;i<=G;i++){

        for(j=pozmax;j>=1;j--)
            if(suma[j]>0)
                if(j+v[i].e<=G+max)
                    if(suma[j+v[i].e]>suma[j]+v[i].p)
                        suma[j+v[i].e]=suma[j]+v[i].p;
        if(pozmax+v[i].e<=G+max)
            pozmax+=v[i].e;
        else
            pozmax=G+max;
        if(suma[v[i].e]>0){
            if(suma[v[i].e]>v[i].p)
                suma[v[i].e]=v[i].p;
        }
        else
            suma[v[i].e]=v[i].p;

    }
    if(suma[W]>0)
        fprintf(fout,"%d",suma[W]);
    else{
        k=0;
        i=W;
        while(k==0 && i<=pozmax){
            if(suma[i]>0){
                fprintf(fout,"%d",suma[i]);
                k=1;
            }

            i++;
        }

    }






    return 0;
}