46 lines
864 B
C++
46 lines
864 B
C++
#include <bits/stdc++.h>
|
|
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;
|
|
} |