问题描述:现有背包容量s,有物品n个,其重量和价值分别是w[i],p[i],算出可以装的最大价值。
状态转移方程:c[i][s]=max(c[i-1][s],c[i-1][s-w[i]]+p[i]);
代码:
#include<cstdio> #include <iostream> #include <cstring> using namespace std; int c[100][100]={0}; int main(){ int s;//容量 int n;//个数 int maxx=0; int w[100];//每个物品的重量 int p[100];//每个物品的价值 scanf("%d %d",&s,&n); for(int i=1;i<=n;i++){ scanf("%d %d",&w[i],&p[i]); } memset(c,0,sizeof(c)); for(int i=1;i<n+1;i++){ for(int j=1;j<s+1;j++){ if(j>=w[i]){ c[i][j]=max(c[i-1][j],c[i-1][j-w[i]]+p[i]); maxx=max(maxx,c[i][j]); }else{ c[i][j]=c[i-1][j]; } } } printf("%d",maxx); return 0; }