Cod sursa(job #1164149)

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

    if(sum < W) g << "-1\n";
    else
    {
        dp[0] = 1;
        sol = 2000000000;
        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(j+V[i].w >= W && dp[j+V[i].w] < sol) sol = dp[j+V[i].w];
                }
            }
        }

        g << sol-1 << '\n';
    }

    g.close();
    return 0;
}