Cod sursa(job #1813100)

Utilizator Coroian_DavidCoroian David Coroian_David Data 22 noiembrie 2016 18:19:55
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <algorithm>
 
#include <climits>
 
#include <cstdio>
 
using namespace std;
 
FILE *f, *g;
 
bool cmp(float a, float b)
{
    if(a > b)
        return true;
 
    return false;
}
 
int n,  i, c[1002], gr[1002], gMax = 100000;
 
int cMax[100001], uz[100001][1002];
 
int minCost = INT_MAX, s;
 
int j,k ;
 
int main()
{
    f = fopen("energii.in", "r");
 
    fscanf(f, "%d%d", &n, &s);
 
    for(i = 1; i <= n ;i ++)
        fscanf(f, "%d%d", & c[i], & gr[i]);
 
    fclose(f);
 
    for(j = 1; j <= gMax; j ++)
        cMax[j] = -1;
 
    cMax[0] = 0;
 
    for(j = 1; j <= gMax; j ++)
        for(i = 1; i <= n; i ++)
        {
            if(cMax[j - gr[i]] != -1 && !uz[j - gr[i]][i])
            {
                if(cMax[j] < c[i] + cMax[j - gr[i]])
                {
                    cMax[j] = c[i] + cMax[j - gr[i]];
 
                    for(k = 1; k <= n; k ++)
                        uz[j][k] = uz[j - gr[i]][k];
 
                    uz[j][i] = 1;
                }
            }
        }
 
        int aux;
 
    for(i = 1; i <= gMax; i ++)
    {//printf("%d %d\n", cMax[i], minCost);
 
        if(cMax[i] > 0 &&  cMax[i] >= s && cMax[i] < minCost)
            minCost = cMax[i],aux = i;
 
    }
 
 
    if(minCost == INT_MAX)
        minCost = -1, aux = -1;
 
 
    g = fopen("energii.out", "w");
 
    fprintf(g, "%d", minCost);
 
    fclose(g);
 
    return 0;
}