//01背包
void WKnapsack3(int *value, int* v, int n, int V)
{
int d[100];
memset(d, 0, sizeof(int)* 100);
bool visit[100][100];
memset(visit, 0, sizeof(bool)* 100 * 100);
for (int i = 0; i < n; i++)
{
for (int j = V; j >= v[i]; j--)
{
if (j >= v[i])
{
if (d[j] < d[j - v[i]] + value[i])
visit[i][j] = true;
d[j] = max(d[j], d[j - v[i]] + value[i]);
}
}
}
printf("%d ", d[V]);
printf("路径:\n");
for (int i = n-1, j = V; i>=0 && j>0 ; i--)//打印 路径
{
if (visit[i][j])
{
printf("%d ", value[i]);
j = j - v[i];
}
}
}01背包
最新推荐文章于 2025-05-21 16:29:59 发布
本文详细介绍了01背包问题的经典解决方法,通过使用动态规划算法实现物品的最大价值选择。代码中实现了状态转移方程,并记录了选取物品的过程,以便于追踪最优解路径。
1432

被折叠的 条评论
为什么被折叠?



