#include using namespace std; const int N = 15; const int INF = 0x3f3f3f3f; int a[N]; int res = INF; // 结果 /* 12 21 31 40 49 58 69 79 90 101 15 */ // m是剩余多少公里 sum已经花了多少钱 void dfs(int m, int sum) { // 剪枝 if (sum >= res) return; if (m == 0) { res = min(res, sum); // 最少钱数的路径取得胜利 return; } // 安排这一步他能采用哪种走法 for (int i = 1; i <= min(m, 10); i++) dfs(m - i, sum + a[i]); } int solve() { for (int m = 1; m <= 10; m++) { res = INF; // 递归 dfs(m, 0); // m是剩余多少公里 sum已经花了多少钱 cout << res << " "; } } /* 12 20 30 40 25 60 70 80 90 11 21 */ int main() { for (int i = 1; i <= 10; i++) cin >> a[i]; int m; cin >> m; solve(); return 0; }