以下是引用StarWing83在2011-1-2 12:59:38的发言:
#include
#include
#include
int main(void)
{
struct
{
char *name;
int size;
int value;
} item[] =
{
{"A", 3, 4},
{"B", 4, 5},
{"C", 7, 10},
{"D", 8, 11},
{"E", 9, 13},
};
#define ILEN (sizeof(item)/sizeof(item[0]))
#define PSIZE 17
int max;
{
int i, j, v[PSIZE + 1] = {};
for (i = 0; i < ILEN; ++i)
for (j = item.size; j <= PSIZE; ++j)
if (v[j] < v[j-item.size] + item.value)
v[j] = v[j-item.size] + item.value;
printf("%d\n", max = v[PSIZE]);
}
{
int i, j, v[PSIZE + 1] = {}, s[PSIZE + 1] = {};
for (i = 0; i < ILEN; ++i)
for (j = item.size; j <= PSIZE; ++j)
if (v[j] <= v[j-item.size] + item.value)
{
v[j] = v[j-item.size] + item.value;
memcpy(s[j], s[j-item.size], sizeof(s[j]));
++s[j];
if (j == PSIZE && v[j] == max)
{
int i, j;
for (i = 0; i < ILEN; ++i)
for (j = 0; j < s[PSIZE]; ++j)
printf("%s", item.name);
printf("\n");
}
}
}
return 0;
}
非常好的学习资料啊,