Pagini recente » Cod sursa (job #2374392) | Cod sursa (job #1605657) | Cod sursa (job #352036) | Cod sursa (job #2948368) | Cod sursa (job #1866816)
// En.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
unsigned int G, W, e[1000], c[1000], mincost[5001], min = -1;
unsigned char available[5001][125];
int main()
{
FILE *in, *out;
int i, curren, j;
if (!(in = fopen("energii.in", "r")))
return -1;
if (!fscanf(in, "%d %d", &G, &W))
return -1;
for (i = 0; i < G; ++i)
if (!fscanf(in, "%d %d", &e[i], &c[i]))
return -1;
for (i = 0; i < G; ++i)
if ((mincost[e[i]]>c[i]) || (!mincost[e[i]]))
{
mincost[e[i]] = c[i];
for (j = 0; j < G / 8; ++j)
available[e[i]][j] = 0xFF;
available[e[i]][G / 8] = 0xFF << (8 - G%8);
available[e[i]][i / 8] &= ~(1 << (7 - i % 8));
if (((min == -1) || (min > mincost[e[i]])) && (e[i] >= W))
min = mincost[e[i]];
}
for (curren = 1; curren < W;++curren)
if (mincost[curren])
{
for (i = 0; i < G; ++i)
{
if (available[curren][i / 8] & (1 << (7 - i % 8)) == (1 << (7 - i % 8)))
if ((mincost[curren + e[i]]>mincost[curren] + c[i]) || (!mincost[curren + e[i]]))
{
mincost[curren + e[i]] = mincost[curren] + c[i];
for (j = 0; j < G / 8; ++j)
available[curren + e[i]][j] = available[curren][j];
available[curren + e[i]][G / 8] = available[curren][G / 8];
available[curren + e[i]][i / 8] &= ~(1 << (7 - i % 8));
if (((min == -1) || (min > mincost[curren + e[i]])) && (curren + e[i] >= W))
min = mincost[curren + e[i]];
}
}
}
if (!(out = fopen("energii.out", "w")))
return -1;
if (!fprintf(out, "%d", min))
return -1;
return 0;
}