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