洛谷P1049 装箱问题

这个题是以前做的,当时还不会一维数组做背包(丢人),普普通通的01背包

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;

int min(int a, int b){
    return a < b ? a : b;
}

int main()
{
    int m;
    int n;
    cin >> m;
    cin >> n;
    int a[31];
    for (int i = 0; i < n; i++){
        cin >> a[i];
    }
    int map[31][20001] = { 0 };
    for (int i = 0; i <= m; i++){
        map[0][i] = i;
    }

    for (int i = 1; i <= m; i++){
        for (int j = 1; j <= n; j++){
            if (i >= a[j - 1]){
                map[j][i] = min(map[j - 1][i], map[j - 1][i - a[j - 1]]);
            }
            else{
                map[j][i] = map[j - 1][i];
            }
        }
    }

    cout << map[n][m] << endl;



    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Vetsama/p/12288373.html