首页 > Windows开发 > 详细

AcWing 2. 01背包问题

时间:2019-11-16 20:58:26      阅读:89      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

朴素

//朴素二维
#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](去掉第i个)和 f[i-1][j-v[i]]+w[i](先去掉第i个,并减去他的质量,再加上) 
            f[i][j]=f[i-1][j];//左边
            //右边 
            //当j<v[i]时,情况不存在,就不用考虑 
            if(j>=v[i]) f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
        }
    cout<<f[n][m]<<endl;
    return 0;
}

 

优化

//一维优化
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n, m;
int v[N], w[N];
int f[N];
int main() {
    cin >> m >> n;//m表示时间,n表示数量
    for (int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];
    for (int i = 1; i <= n; i ++ )
        for (int j = m; j >= v[i]; j -- )
            f[j] = max(f[j], f[j - v[i]] + w[i]);
    cout << f[m];
    return 0;
}

 

 

AcWing 2. 01背包问题

原文:https://www.cnblogs.com/QingyuYYYYY/p/11873168.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!