Pagini recente » Cod sursa (job #36962) | Cod sursa (job #323234) | Borderou de evaluare (job #3150981) | Cod sursa (job #2614771) | Cod sursa (job #1193287)
#include <fstream>
#define MaxN 1001
#define MaxS 5001
using namespace std;
int N, S, v[MaxN], cost[MaxN],c[MaxS],Minim = 999999999;
void ReadData()
{
ifstream fin("energii.in");
fin >> N >> S;
for (int k=1; k<=N; ++k)
fin >> v[k] >> cost[k];
fin.close();
}
int main()
{
int i, j, k;
ReadData();
for (j=1; j<=S; ++j) c[j] = -1;
c[0] = 0;
for (i=1; i<=N; ++i)
for (j=S; j>=0; --j)
if (c[j] != -1)
{
if (j + v[i] > S)
if (Minim > c[j] + cost[i])
Minim = c[j] + cost[i];
if (j + v[i] <= S)
if (c[j + v[i]] > c[j] + cost[i] || c[j + v[i]] == -1)
c[j + v[i]] = c[j] + cost[i];
}
ofstream fout("energii.out");
if (c[S] == -1 && Minim == 999999999)
fout << -1;
else
fout << (Minim < c[S] ? Minim : (c[S] == -1 ? Minim : c[S]));
fout.close();
return 0;
}