之前学了dp没有好好看一遍背包九讲,今天把背包九讲过一遍,供之后自己看方便一些。
一. 01背包
题目链接:https://www.acwing.com/problem/content/2/
n,V<=1000
这个没什么好说的,加滚动数组,复杂度O(nV),代码如下:
#include<cstdio> #include<algorithm> using namespace std; const int maxn=1e3+5; int n,V,dp[maxn],v[maxn],w[maxn]; int main(){ scanf("%d%d",&n,&V); for(int i=1;i<=n;++i) scanf("%d%d",&v[i],&w[i]); for(int i=1;i<=n;++i) for(int j=V;j>=v[i];--j) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("%d\n",dp[V]); return 0; }