Pagini recente » Cod sursa (job #1566341) | Cod sursa (job #1590434) | Cod sursa (job #1480007) | Cod sursa (job #1108834) | Cod sursa (job #652277)
Cod sursa(job #652277)
#include<cstdio>
#define inf 0xfffffff
#define min(a, b) (a) < (b) ? (a) : (b)
using namespace std;
int eg[1001], cg[1001], dp[2][10001];
//dp[i][j] = costul minim, alegand numai din primele i generatoare, cu care pot genera j unitati de energie
//se obs ca linia curenta depinde doar de ultima linie calculata
int main(){
freopen("energii.in", "r", stdin), freopen("energii.out", "w", stdout);
int G, W, i, j, min;
scanf ("%d %d", &G, &W);
for (i = 1; i <= G; i++) scanf ("%d %d", &eg[i], &cg[i]);
for (i = 0; i < 2; i++)
for (j = 1; j <= 10001; j++) dp[i][j] = inf;
for (i = 1; i <= G; i++)
for (j = 0; j <= 10001; j++){
if (j >= eg[i] && dp[(i-1) % 2][j - eg[i]] != inf && dp[(i-1) % 2][j - eg[i]] + cg[i] < dp[i % 2][j])
dp[i % 2][j] = dp[(i-1) % 2][j - eg[i]] + cg[i];
dp[i % 2][j] = min(dp[(i-1) % 2][j], dp[i % 2][j]);
}
min = inf;
for (i = W; i < 10001; i++)
if (dp[G % 2][i] != inf) min = min(min, dp[G % 2][i]);
printf("%d\n", min);
return 0;
}