//动态规划解决完全背包问题 #include#define max(a,b) (a)>(b)?a:b #define MAX 100 void GetResult(int V[],int weight[],int num,int capacity){ int dp[MAX][MAX]; for(int i = 0;i <= num;i++) dp[i][0] = 0; for(int i = 0;i <= capacity;i++) dp[0][i] = 0; for(int i = 1;i <= num;i++){ for(int j = 1;j <= capacity;j++){ for(int k = 0;k*V[i]<=j;k++){ dp[i][j] = max(dp[i-1][j],dp[i-1][j-k*V[i]]+k*weight[i]); } } } printf("该背包可以容纳的最大价值为:%dn",dp[num][capacity]); } int main(){ int V[MAX]; int weight[MAX]; int num,capacity; printf("请输入背包的最大容量:"); scanf("%d",&capacity); printf("请输入物品的数量:"); scanf("%d",&num); for(int i=1;i<=num;i++){ printf("请输入第%d个物品的体积和价值(20 100):",i); scanf("%d %d",&V[i],&weight[i]); } GetResult(V,weight,num,capacity); }



