思路
动态规划基础题目。关于动态规划的详解点击这里。
代码
#include<iostream>
#include<cstring>
using namespace std;
int max(int x,int y){
if(x>y) return x;
return y;
}
int main(){
//freopen("data.txt","r",stdin);
int n,m;
cin>>n>>m;//n件物品,最大容量m
int w[n+1],v[n+1];
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
}
int dp[n+1][m+1];//dp[i][j]: 面对第i件物品且背包容量为j时的最大价值dp[i][j]
memset(dp,0,sizeof(dp));
//动态规划
for(int i=1;i<=n;i++){//第i件物品
for(int j=1;j<=m;j++){//最大容量j
if(w[i]<=j){//装得下
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
}else{//装不下
dp[i][j]=dp[i-1][j];
}
}
}
cout<<dp[n][m];
return 0;
}