#include <iostream> #include <vector> #include <climits> using namespace std; int main() { int M, N; while (cin >> M) { cin >> N; vector<int> stamps(N); for (int i = 0; i < N; ++i) { cin >> stamps[i]; } // 初始化dp数组,dp[i]表示凑成总值i所需的最少邮票张数 vector<int> dp(M + 1, INT_MAX); dp[0] = 0; // 凑成总值0不需要任何邮票 // 动态规划填表 for (int i = 0; i < N; ++i) { for (int j = M; j >= stamps[i]; --j) { if (dp[j - stamps[i]] != INT_MAX) { dp[j] = min(dp[j], dp[j - stamps[i]] + 1); } } } // 输出结果 if (dp[M] == INT_MAX) { cout << 0 << endl; // 无法凑成总值M } else { cout << dp[M] << endl; // 输出最少邮票张数 } } return 0; }