Pagini recente » Rating Horga Adrian (Gringo) | Clasament sfds | Cod sursa (job #118072) | Cod sursa (job #118041) | Cod sursa (job #1277024)
#include <stdio.h>
#include <algorithm>
FILE *fin, *fout;
int n, k, *v1, *v2, sum, temp;
struct generator
{
int energie;
int cost;
} *input;
int max(int a, int b)
{
return (a > b)?a:b;
}
int main()
{
fin = fopen("energii.in", "r");
fout = fopen("energii.out", "w");
fscanf(fin, "%d%d", &n, &k);
input = new generator[n+3];
for(int i = 0; i< n; i++)
{
fscanf(fin, "%d%d", &input[i+1].energie, &input[i+1].cost);
sum+=input[i+1].cost;
}
v1 = new int[sum+3];
v2 = new int[sum+3];
for(int i = 0; i<= sum; i++) v1[i] = 0;
v2[0] = 0;
for(int i = 1; i<= n; i++)
{
for(int j = 1; j<=sum; j++)
{
if(input[i].cost > j) {v2[j] = v1[j];continue;}
v2[j] = max(v1[j], v1[j- input[i].cost] + input[i].energie);
}
for(int j = 1; j<=sum; j++) v1[j] = v2[j];
}
temp = (v1[std::upper_bound(v1+1, v1+sum+1, k-1) - v1+1] == k)?std::lower_bound(v1+1, v1+sum+1, k) - v1:std::lower_bound(v1+1, v1+sum+1, k) - v1+1;
fprintf(fout, "%d\n", temp);
fclose(fin);
fclose(fout);
return 0;
}