关于01背包问题的三种解法。实际上是运用了两种算法思想:动态规划和回溯。
但是对于回溯算法,可以进行剪枝的改进。所以这里提供了两串代码**,其中的第二串代码里面getmost()是不进行剪枝的操作。getbag()则是进行了剪枝的操作。**
动态规划算法代码如下:
#include<stdio.h>
#include<stdlib.h>
int flag[5]={
1,1,1,1,1};
int weight[5]={
0,2,3,4,5};
int value[5]={
0,1,2,3,4};
int v[100][100];
#define W 10
#define M 7
//求最大值
int max(int a,int b){
if(a>b){
return a;
}else
{
return b;
}
}
void getV(){
//初始化数组
for(int i=0;i<=W;i++){
v[0][i]=0;
}
for(int i=0;i<5;i++){
v[i][0]=0;
}
for(int i=1;i<