Pagini recente » Cod sursa (job #1982071) | Cod sursa (job #3036648) | Cod sursa (job #2025343) | Cod sursa (job #3190993) | Cod sursa (job #1049327)
#include <iostream>
#include <fstream>
using namespace std;
int G,W,E[10005],C[10005],energie;
int a[1099][5099],minim=2000000000;
void Citire()
{
int i;
ifstream fin("energii.in");
fin>>G>>W;
for(i=1;i<=G;i++)
{
fin>>E[i]>>C[i];
energie+=E[i];
}
fin.close();
}
void Rezolvare()
{
//a[i][j]=costul minim obtinerii energiei j selectand o submultime a primelor i generatoare;
//a[i][j]=min(a[i-1][j], a[i-1][j - E[i]] + C[i]);
int i,j;
for(i=1;i<=G;i++)
for(j=1;j<=5009;j++)
a[i][j]=2000000000;
a[1][E[1]]=C[1];
for(i=2;i<=G;i++)
for(j=1;j<=5001;j++)
if(E[i]<=j)
a[i][j]=min(a[i-1][j], a[i-1][j - E[i]] + C[i]);
}
void Afisare()
{
ofstream fout("energii.out");
if(energie<W) fout<<"-1\n";
else
{
Rezolvare();
for(int i=W;i<=5001;i++)
minim=min(minim,a[G][i]);
fout<<minim<<"\n";
}
fout.close();
}
int main()
{
Citire();
Afisare();
return 0;
}