之前学了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;
}
View Code

相关文章:

猜你喜欢
  • 2021-09-07
  • 2021-08-19
相关资源
相似解决方案