Cod sursa(job #2178367)

Utilizator DimaTCDima Trubca DimaTC Data 19 martie 2018 13:30:39
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<bits/stdc++.h>
#define NMAX 1025
#define DIM 10000
char buff[DIM];
int poz=0;
 
void read(int &numar)
{
     numar = 0;
     while (buff[poz] < '0' || buff[poz] > '9')     
          if (++poz == DIM) 
               fread(buff,1,DIM,stdin),poz=0;
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar = numar*10 + buff[poz] - '0';
          if (++poz == DIM) 
               fread(buff,1,DIM,stdin),poz=0;               
}
}

using namespace std;

const int G=10150;
const int inf=1e9;
int a[NMAX],c[NMAX];
int DP[3][G+5],n,W,rs=inf;

int32_t main() {
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	read(n); read(W);
 	
 	for (int i=1; i<=n; i++) {
 		read(a[i]); read(c[i]);
	 }
 	
 	
 	for (int i=0; i<2; i++) {
 		for (int j=1; j<=G; j++) DP[i][j]=inf;
	 }
 	
 	bool u=1;
	for (int i=1; i<=n; i++) {
		for (int j=1; j<=G; j++) {
			if (j<a[i]) DP[!u][j];
			else DP[u][j]=min(DP[!u][j], DP[!u][j-a[i]]+c[i]);
		}
		u=!u;
	}
	u=!u;
	
	for (int i=W; i<=G; i++) {
		rs=min(DP[u][i], rs);
	}
	if (rs==inf) rs=-1;
	cout<<rs;
	
	return 0;
}