Cod sursa(job #593765)

Utilizator Smaug-Andrei C. Smaug- Data 4 iunie 2011 15:03:15
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

#define MAXN 1010
#define MAXW 5010
#define INF 1<<30

int main(){

  freopen("energii.in", "r", stdin);
  freopen("energii.out", "w", stdout);

  int E[MAXN], C[MAXN];
  static int R[MAXN][MAXW];
  int i, j, N, W;

  scanf("%d%d", &N, &W);
  for(i=1; i<=N; i++)
    scanf("%d%d", E+i, C+i);

  for(i=1; i<=W; i++)
    R[0][i]=INF;

  for(i=1; i<=N; i++){
    for(j=1; j<=W; j++){
      if(E[i]<=j){
	if(C[i]+R[i-1][j-E[i]] < R[i-1][j])
	  R[i][j]=C[i]+R[i-1][j-E[i]];
	else
	  R[i][j]=R[i-1][j];
      }
      else if(C[i] < R[i-1][j])
	R[i][j]=C[i];
      else
	R[i][j]=R[i-1][j];
    }
  }

  printf("%d\n", (R[N][W]!=INF)? R[N][W]: -1);

  return 0;

}