2019-11-30
10:04:17
此代码是经过二维数组优化成一维数组后的代码。
先理解二维数组的代码更容易理解。而一维数组中的j 从 W开始 递减遍历。
#include<bits/stdc++.h> #include <stdlib.h> #include <stdio.h> using namespace std; int w[30],v[30],f[50000]; int n,m; int main(){ cin>>m>>n; for(int i=1;i<=n;++i){ cin>>v[i]>>w[i]; w[i] *= v[i]; } //01背包 for(int i=1;i<=n;++i){ for(int j=m;j>=v[i];j--){ if(j>=v[i]){ f[j] = max(f[j],f[j-v[i]]+w[i]); } } } cout<<f[m]<<endl; system("pause"); return 0; }