洛谷——动态规划

2019-11-30

10:04:17

 

 

 

 此代码是经过二维数组优化成一维数组后的代码。

先理解二维数组的代码更容易理解。而一维数组中的j 从 W开始 递减遍历。

#include<bits/stdc++.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int w[30],v[30],f[50000];
int n,m;
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;++i){
        cin>>v[i]>>w[i];
        w[i] *= v[i];
    }
    //01背包
    for(int i=1;i<=n;++i){
        for(int j=m;j>=v[i];j--){
            if(j>=v[i]){
                f[j] = max(f[j],f[j-v[i]]+w[i]);
            }
        }
    } 
    cout<<f[m]<<endl;
    system("pause");
    return 0;
} 

 

posted @ 2019-11-30 10:05  JasonPeng1  阅读(169)  评论(0编辑  收藏  举报