您当前的位置: 首页 > 

MangataTS

暂无认证

  • 4浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 2. 01背包问题(01背包模板)

MangataTS 发布时间:2022-02-17 19:08:00 ,浏览量:4

题目链接

https://www.acwing.com/problem/content/2/

思路

对于每一个物品我们能做一个选择,选上它(前提是当前的剩余背包容量够),或者不选,那么我们只需要在这其中取一个max即可,我们定义一个 f [ i ] [ j ] f[i][j] f[i][j]表示的含义是从前i个物品中选择背包容量最多为j的价值,那么我们只需要考虑当前第i个物品的取舍,也就是 f [ i ] [ j ] = m a x ( f [ i − 1 ] [ j ] , f [ i − 1 ] [ j − v [ i ] ] + w [ i ] ) f[i][j] = max(f[i-1][j],f[i-1][j-v[i]] + w[i]) f[i][j]=max(f[i−1][j],f[i−1][j−v[i]]+w[i]),由于我们这个转移方程只会用到上一层的状态以及当前这一层的状态,所以我们再通过滚动数组优化为 f [ j ] = m a x ( f [ j ] , f [ j − v [ i ] ] + w [ i ] ) f[j] = max(f[j],f[j-v[i]] + w[i]) f[j]=max(f[j],f[j−v[i]]+w[i])

代码
#include
using namespace std;

const int N = 1000+10;
int f[N],n,v,V[N],W[N];

int main()
{
    scanf("%d%d",&n,&v);
    for(int i = 1;i             
关注
打赏
1665836431
查看更多评论
0.0387s