Pagini recente » Romanian IOI Medalists: Careers | Cod sursa (job #448058) | Cod sursa (job #1999688) | Cod sursa (job #2754029) | Cod sursa (job #2178367)
#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;
}