Cod sursa(job #1164101)

Utilizator EpictetStamatin Cristian Epictet Data 1 aprilie 2014 20:46:23
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
struct art { int w,c; } V[1009];
int n,W,sum,sol,dp[10009];
int main()
{
    f >> n >> W;
    for(int i=1; i<=n; i++)
    {
        f >> V[i].w >> V[i].c;
        sum += V[i].c;
    }

    dp[0] = 1;
    for(int i=1; i<=n; i++)
    {
        for(int j=W; j>=0; j--)
        {
            if(dp[j])
            {
                if(dp[j+V[i].w])
                {
                    if(dp[j+V[i].w] > dp[j] + V[i].c)
                        dp[j+V[i].w] = dp[j] + V[i].c;
                }
                else dp[j+V[i].w] = dp[j] + V[i].c;
            }
        }
    }

    if(sum < W) g << "-1\n";
    else
    {
        int i = W-1;
        while(!dp[++i]);
        g << dp[i]-1 << '\n';
    }

    g.close();
    return 0;
}