lynne's blog:)

I am a force to be reckoned with.

算法之背包问题(动态规划)

实验要求

设计原理

核心代码

//优化+标记

void Knapsack()
{
int i,j,k;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= W; j++)
{
for (k = 1; k <= V; k++)
{
if ((goods[i].weight <= j) && (goods[i].c <= k))
{
if (m[i - 1][j][k] > (m[i - 1][j - goods[i].weight][k - goods[i].c] + goods[i].value))
{
m[i][j][k] = m[i - 1][j][k];
s[i][j][k] = 0;
}
else
{
m[i][j][k]=m[i - 1][j - goods[i].weight][k - goods[i].c] + goods[i].value;
s[i][j][k] = 1;
}
}
else
{
m[i][j][k] = m[i - 1][j][k];
s[i][j][k] = 0;
}
}
}
}
}

实验结果




算法时间复杂度分析

实验总结

动态规划算法设计的难点和重点在于如何划分子问题,以及找出递推方程。并且,在使用动态规划算法前,还需要验证问题是否满足优化原则。
在具体的编程实现中难度不大。

源代码:https://github.com/lynneliu-creator/algorithm
欢迎交流~