Pagini recente » Cod sursa (job #3217673) | Cod sursa (job #2084131) | Cod sursa (job #1073389) | Cod sursa (job #1376930) | Cod sursa (job #1049316)
#include <iostream>
#include <fstream>
using namespace std;
int w,g;
struct energii
{
int e,c;
};
energii gn[1005];
int energie, minim;
int a[1005][5005];
void Citire()
{
ifstream f("energii.in");
f>>g>>w;
int i;
for(i=1;i<=g;i++)
{
f>>gn[i].e>>gn[i].c;
energie+=gn[i].e;
}
}
void Solve()
{
int i,j;
// a[i][j]= costul minim obtinerii energiei j alegand o submultime
//din primele i generatoare
// a[i][j]= min(a[i-1][j] , a[i-1][j - gn[i].e] + gn[i].c)
for(i=1;i<=g;i++)
for(j=1;j<=5002;j++)
a[i][j]= 10000000;
a[1][gn[1].e]=gn[1].c;
for(i=2;i<=g;i++)
for(j=1;j<=5001;j++)
if(j>=gn[i].e)
a[i][j]= min(a[i-1][j] , a[i-1][j - gn[i].e] + gn[i].c);
}
void Afisare()
{
ofstream fout("energii.out");
if(energie < w) fout<<"-1\n";
else
{
Solve();
// minim=1000000;
// for(int i=w;i<=5002;i++)
// minim=min(minim, a[g][i]);
// fout<<minim<<"\n";
fout<<a[g][w]<<"\n";
}
fout.close();
}
int main()
{
Citire();
Afisare();
return 0;
}