#include<stdio.h> int c[10][100]; int w[10],p[10],x[10]; int RUN(int m,int n) { int i,j; for(i=1;i<n+1;i++) for(j=1;j<m+1;j++) { if(w[i]<=j) { if(p[i]+c[i-1][j-w[i]]>c[i-1][j]) c[i][j]=p[i]+c[i-1][j-w[i]]; else c[i][j]=c[i-1][j]; } else c[i][j]=c[i-1][j]; } printf("背包最大价值 %d\n",c[n][m]); } int main() { int n,W; int i,j,s; for(i=0;i<10;i++) for(j=0;j<100;j++) c[i][j]=0; scanf("%d%d",&n,&W);//商品数量 背包容量 for(i=1;i<n+1;i++) scanf("%d%d",&w[i],&p[i]);//重量 价值 RUN(W,n); }
动态规划法求解0-1背包
时间: 2024-10-11 21:32:37