Cod sursa(job #1164146)

Utilizator EpictetStamatin Cristian Epictet Data 1 aprilie 2014 21:26:29
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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[10001009];
int main()
{
    f >> n >> W;
    for(int i=1; i<=n; i++)
    {
        f >> V[i].w >> V[i].c;
        sum += V[i].w;
    }

    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
    {
        sol = 2000000000;
        for(int i=W; i<=sum; i++) if(dp[i] < sol && dp[i]) sol = dp[i];
        g << sol-1 << '\n';
    }

    g.close();
    return 0;
}