Pagini recente » Cod sursa (job #892264) | Cod sursa (job #1239430) | Cod sursa (job #1021120) | Cod sursa (job #2335561) | Cod sursa (job #2458884)
#include <bits/stdc++.h>
#define MAX 131072
using namespace std;
const int NMAX = 5005;
FILE *IN;
int G, W, ans;
int dp[2 * NMAX];
pair <int, int> E[NMAX];
int pos, sign;
char f[MAX];
inline void Read(int &nr){
sign = 0;
nr = 0;
while(f[pos] < '0' || f[pos] > '9'){
if(f[pos] == '-') sign = 1;
pos++;
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
while(f[pos] >= '0' && f[pos] <= '9'){
nr = 10 * nr + f[pos++] - '0';
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
if(sign) nr =- nr;
}
inline void read(){
Read(G);
Read(W);
for(int i = 1; i <= G; i++){
Read(E[i].first);
Read(E[i].second);
}
}
int main(){
IN = fopen("energii.in", "r");
freopen("energii.out", "w", stdout);
read();
for(int i = 1; i <= 2 * 5001; i++)
dp[i] = 2e9;
ans = 2e9;
for(int i = 1; i <= G; i++){
for(int j = 1; j <= 2 * 5000; j++){
if(dp[j] != 0){
if(E[i].first + j <= 2 * 5000)
dp[E[i].first + j] = min(dp[E[i].first + j], E[i].second + dp[j]);
else if(E[i].first >= W) ans = min(ans, E[i].second);
}
}
dp[E[i].first] = min(dp[E[i].first], E[i].second);
}
for(int i = W; i <= 2 * 5000; i++)
ans = min(ans, dp[i]);
printf("%d", ans);
return 0;
}