思路
動態規劃基礎題目。關於動態規劃的詳解點擊這裏。
代碼
#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;
}