大二下学期开的算法设计与分析课程老师说是研究生才要学的课,但是我们大二就要学! 虽然有难度,但还是要学滴。(现在我大四了回过来一看 好简单的说)
代码虽然不长,但是还是。。很有。。技术含量的
#include<iostream>
using namespace std;
#define N 3 // N件宝贝
#define V 5 // C是背包的总capacity
int main()
{
int value[N + 1] = {0, 60, 100, 120}; // 钱啊
int weight[N + 1] = {0, 1, 2, 3}; // 重量
int f[N + 1][V + 1] = {0}; // f[i][j]表示在背包容量为j的情况下, 前i件宝贝的最大价值
int i = 1;
int j = 1;
for(i = 1; i <= N; i++)
{
for(j = 1; j <= V; j++)
{
// 递推关系式出炉
if(j < weight[i])
{
f[i][j] = f[i - 1][j];
}
else
{
int x = f[i - 1][j];
int y = f[i - 1][j - weight[i]] + value[i];
f[i][j] = x < y ? y : x;
}
}
}
for(i = N; i >= 1; i--)
{
for(j = 1; j <= V; j++)
{
printf("%4d ", f[i][j]);
}
cout << endl;
}
for(i = N; i >= 1; i--)
{
for( j = 1; j <= V; j++)
{
printf("%4d ", f[i][j]);
}
cout << endl;
}
return 0;
}