#include <stdio.h> |
#include <stdlib.h> |
#define MAXN 100//物品种类最大数量 |
int w[MAXN],V[MAXN]; |
int C; //最大容量 |
int n; //物品种类 |
int d[MAXN][MAXN]; |
int jMax; |
int min( int , int ); |
//两数之间的最小值 |
int max( int , int ); |
//两数之间的最大值 |
void print_ans( int d[][MAXN], int , int ); |
//构造最优解并输出 |
int main() |
{ |
int i,j; |
printf ( "输入物品种类数n(1-100):\n" ); |
scanf ( "%d" ,&n); |
printf ( "输入每个种类的重量:\n" ); |
for (i=1; i<=n; i++) |
{ |
scanf ( "%d" ,&w[i]); |
} |
printf ( "输入每个种类的价值:\n" ); |
for (i=1; i<=n; i++) |
{ |
scanf ( "%d" ,&V[i]); |
} |
printf ( "输入背包的容量C:\n" ); |
scanf ( "%d" ,&C); |
|
jMax=min(C,w[n]-1); |
for (j=0; j<=jMax; j++) |
d[n][j]=0; |
for (j=w[n]; j<=C; j++) |
d[n][j]=V[n]; |
for (i=n-1; i>1; i--) |
{ |
jMax=min(C,w[i]-1); |
for (j=0; j<=jMax; j++) |
d[i][j]=d[i+1][j]; |
for (j=w[i]; j<=C; j++) |
d[i][j]=max(d[i+1][j],d[i+1][j-w[i]]+V[i]); |
} |
d[1][C]=d[2][C]; |
if (C>=w[i]) |
d[1][C]=max(d[1][C],d[2][C-w[i]]+V[1]); |
|
printf ( "最大可容纳:%d\n" ,d[1][C]); |
return 0; |
} |
int min( int x, int y) |
{ |
if (x>y) |
return y; |
else |
return x; |
} |
int max( int x, int y) |
{ |
if (x<y) |
return y; |
else |
return x; |
} |
by: 发表于:2017-08-09 10:52:51 顶(0) | 踩(0) 回复
??
回复评论