Cod sursa(job #2209331)

Utilizator oanceadavidOancea David oanceadavid Data 2 iunie 2018 20:13:45
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>

using namespace std;

int value[1002];
int cost[1002];
int arr[1002][5002];

int costMin(int n,int c){
	int result;
	if(arr[n][c] != -2)
		result = arr[n][c];
	else if(n==0 || c==0)
		result=0;
	else if(cost[n]>c){
		result=costMin(n-1,c);
	} else {
		int tmp1 = costMin(n-1, c);
		int tmp2 = value[n]+costMin(n-1, c-cost[n]);
		result = max(tmp1,tmp2);
		arr[n][c] = result;
	}
	return result;
}

int main() {
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	memset(arr,-2,sizeof(arr[0][0])*1002*5002);
	int numarGeneratoare, costRepornire;
	scanf("%i", &numarGeneratoare);
	scanf("%i", &costRepornire);
	for(int i = 1; i <= numarGeneratoare; i++){
		scanf("%i", &cost[i]);
		scanf("%i", &value[i]);
	}
	int result = costMin(numarGeneratoare,costRepornire);
	if(result >= costRepornire)
		printf("%i",result);
	else
		printf("-1");
	return 0;
}