#include<bits/stdc++.h> using namespace std; typedef unsigned long long ull; typedef long long ll; int main() { // M代表邮票总值,N代表邮票数目 int M = 0, N = 0; while (cin >> M >> N) { int num = 0; // weight存储每张邮票的面值 vector<int> weight(N); for (int i = 0; i < N; i++) { cin >> weight[i]; } // 设置为pair型为了能够存储邮票数目 vector<pair<int, int>> dp(M + 1, {0, 0}); // 遍历所有邮票 for (int i = 0; i < N; i++) { // 从背包容量最大为M开始选取 for (int j = M; j >= weight[i]; j--) { // 一旦数值更大则更新 if (dp[j].second < dp[j - weight[i]].second + weight[i]) { dp[j].second = dp[j - weight[i]].second + weight[i]; dp[j].first = dp[j - weight[i]].first + 1; } // 如果数值相同但所用邮票数目更少则也进行更新 else if (dp[j].second == dp[j - weight[i]].second + weight[i] && dp[j].first > dp[j - weight[i]].first + 1) { dp[j].first = dp[j - weight[i]].first + 1; } } } if (dp[M].second != M) cout << 0 << endl; else cout << dp[M].first << endl; } return 0; }