Pagini recente » Cod sursa (job #219983) | Cod sursa (job #1286029) | Cod sursa (job #2423468) | Cod sursa (job #1263158) | Cod sursa (job #761664)
Cod sursa(job #761664)
#include <cstdio>
#define INF 2000000000
int G, W;
int E[1024];
int C[1024];
int dp[1024][5005];
inline int min(int x, int y)
{
if (x < y)
{
return x;
}
return y;
}
int main()
{
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d", &G);
scanf("%d", &W);
for (int i = 1; i <= G; i++)
{
scanf("%d %d", &E[i], &C[i]);
}
for (int i = 0; i <= G; i++)
{
for (int j = 0; j <= W + 3; j++)
{
dp[i][j] = INF;
}
}
int mini = INF;
dp[0][0] = 0;
for (int i = 0; i < G; i++)
{
for (int j = 0; j < W; j++)
{
if (dp[i][j] < INF)
{
if ((dp[i][j] + C[i + 1]) < dp[i + 1][min(j + E[i + 1], W + 2)])
{
dp[i + 1][min(j + E[i + 1], W + 2)] = (dp[i][j] + C[i + 1]);
if (j + E[i + 1] >= W)
{
mini = min(mini, dp[i + 1][min(j + E[i + 1], W + 2)]);
}
}
if ((dp[i][j]) < dp[i + 1][j])
{
dp[i + 1][j] = dp[i][j];
}
}
}
}
printf("%d\n", mini);
return 0;
}