二维数组0-1背包模板
// 01 背包 二维数组
#include <iostream>
#include <string.h>
using namespace std;
int dp[21][1010];
int w[21],c[21];
int main() {
int N,V;
cin>>N>>V;
for(int i=1;i<=N;i++){
cin>>w[i]>>c[i];
}
//核心部分
for(int i = 1;i<=N;i++){
for(int j = 0;j<=V;j++){
if(j>=c[i]){
dp[i][j] = max(dp[i-1][j-c[i]] + w[i],dp[i-1][j]);
}else{
dp[i][j] = dp[i-1][j];
}
}
}
cout<<dp[N][V]<<endl;
return 0;
}
一维数组0-1背包模板
0-1背包一维数组(滚动数组逆序大推小)
int dp[MAX_V];
for (int i = 1; i <= n; ++i)
for (int j = v; j >= w[i]; --j)
dp[j] = max(dp[j - w[i]] + v[i], dp[j]);