这个题是以前做的,当时还不会一维数组做背包(丢人),普普通通的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; }