parent
2c4f50456f
commit
7178e69620
@ -1,2 +1,40 @@
|
|||||||
# 001
|
~~~c
|
||||||
|
#include<stdio.h>
|
||||||
|
#define max(x,y)((x)>(y)?(x):(y))
|
||||||
|
#define MAXN 20
|
||||||
|
int n = 5,W = 10;
|
||||||
|
int w[MAXN] = {0,2,4,5,6};
|
||||||
|
int v[MAXN] = {0,2,2,3,5};
|
||||||
|
int maxv = 0;
|
||||||
|
int knap(int i,int r){
|
||||||
|
if(i==0||r==0){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(r<w[i]){
|
||||||
|
knap(i-1,r);
|
||||||
|
} else{
|
||||||
|
return max(knap(i-1,r),knap(i-1,r-w[i])+v[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
maxv = knap(n,W);
|
||||||
|
printf("求解的最优结果(最优方案)\n");
|
||||||
|
printf("选取的物品:");
|
||||||
|
int x[MAXN] = {0};
|
||||||
|
int i=n,r = W;
|
||||||
|
while(i>=0&&r>0){
|
||||||
|
if(i>0&&knap(i,r)!=knap(i-1,r)){
|
||||||
|
x[i]=1;
|
||||||
|
r = r-w[i];
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
for(i=1;i<=n;i++){
|
||||||
|
if(x[i]==1){
|
||||||
|
printf("%d ",i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
printf("总价值=%d",maxv);
|
||||||
|
}
|
||||||
|
~~~
|
Loading…
Reference in new issue