码迷,mamicode.com
首页 > 其他好文 > 详细

01背包问题

时间:2020-02-09 12:01:25      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:size   题解   mes   ace   ios   链接   条件   ++   含义   

题目链接:

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

 

题解:

关于DP问题,我们一般可以用一套模式去分析

1、分析状态表示f(i,j):

1)f(i,j)表示哪个集合?在01背包问题中,它表示选法的一个集合

2)i,j表示什么条件?在01背包问题中,它表示前i个物品,总体积小于等于j

3)f(i,j)的属性含义是什么?一般有max,min,数量。在01背包问题,它表示最大价值,是max类型

2、分析状态计算

本质上就是对当前集合f(i,j)进行一个划分:

要求是不重不漏,在这里,我们可以将其划分为包含i的集合和不包含i的集合。

包含i的集合表示为:f(i,j) = f(i-1,j);

不包含i的集合表示为:f(i,j) = f(i-1,j-v[i])+w[i];

 

AC代码:

 

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;
int n,m;
int v[N],w[N];
int f[N][N];


int main(){
    cin >> n >> m;
    for(int i=1;i<=n;i++) cin >> v[i] >> w[i];
    
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m;j++){
            f[i][j] = f[i-1][j];
            if(j >= v[i]){
                f[i][j] = max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
            }
        }
    }
    
    cout << f[n][m] << endl;
    
    return 0;
}

 

01背包问题

标签:size   题解   mes   ace   ios   链接   条件   ++   含义   

原文地址:https://www.cnblogs.com/doubest/p/12286470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!