Cod sursa(job #1093781)

Utilizator geniuanduOncescu Andreea geniuandu Data 28 ianuarie 2014 16:43:46
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<cstdio>
using namespace std;
struct andreea{
    int e,c;
};
andreea v[5001];
int i,g,w,j,s,min,maxi;
int a[1001][15001];
int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d %d",&g,&w);
    maxi=0;
    s=0;
    for(i=1;i<=g;i++)
    {
        scanf("%d %d",&v[i].e,&v[i].c);
        if(v[i].e>maxi)
            maxi=v[i].e;
        s=s+v[i].e;
    }
    a[1][v[1].e]=v[1].c;
    for(j=1;j<=w+maxi;j++)
    {
        if(j!=v[1].e)
            a[1][j]=2000000000;

    }

    for(i=2;i<=g;i++)
    {
        a[i][1]=2000000000;
            }
    for(i=2;i<=g;i++)
        for(j=2;j<=w+maxi;j++)
            if(j>=v[i].e)
            {
                if(j==v[i].e)
                {
                    if(a[i-1][j]>v[i].c)
                        a[i][j]=v[i].c;
                    else
                        a[i][j]=a[i-1][j];
                }
                else
                {
                    if(a[i-1][j]>a[i-1][j-v[i].e]+v[i].c)
                        a[i][j]=a[i-1][j-v[i].e]+v[i].c;
                    else
                        if(a[i-1][j]<a[i-1][j-v[i].e]+v[i].c)
                            a[i][j]=a[i-1][j];
                }

            }
            else
                a[i][j]=a[i-1][j];
    int pp=2000000000;
    for(j=w;j<=w+maxi;j++)
        if(a[g][j]!=2000000000)
        {
            if(a[g][j]<pp && a[g][j]!=0)
                pp=a[g][j];
        }
    /*for(i=1;i<=g;i++)
    {
        for(j=1;j<=w+maxi;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }*/
    if(pp==2000000000)
        printf("imposibil\n");
    else
        printf("%d\n",pp);
    return 0;
}