From f9c188f1d8aa10903ad62503c6f24c39385cdb63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Sun, 3 Mar 2024 20:40:52 +0800 Subject: [PATCH] 'commit' --- TangDou/LanQiaoBei/LanQiao14STEMA202212/3.cpp | 2 +- TangDou/LanQiaoBei/LanQiao14STEMA202212/5.cpp | 24 ++++++++++++++ .../LanQiaoBei/LanQiao14STEMA202212/TD.cpp | 31 +++++++++---------- 3 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 TangDou/LanQiaoBei/LanQiao14STEMA202212/5.cpp diff --git a/TangDou/LanQiaoBei/LanQiao14STEMA202212/3.cpp b/TangDou/LanQiaoBei/LanQiao14STEMA202212/3.cpp index 41749fa..5a59024 100644 --- a/TangDou/LanQiaoBei/LanQiao14STEMA202212/3.cpp +++ b/TangDou/LanQiaoBei/LanQiao14STEMA202212/3.cpp @@ -1,4 +1,4 @@ -#include + #include using namespace std; /* diff --git a/TangDou/LanQiaoBei/LanQiao14STEMA202212/5.cpp b/TangDou/LanQiaoBei/LanQiao14STEMA202212/5.cpp new file mode 100644 index 0000000..008e0ec --- /dev/null +++ b/TangDou/LanQiaoBei/LanQiao14STEMA202212/5.cpp @@ -0,0 +1,24 @@ +#include +using namespace std; +const int N = 100; +int a[N]; +int n, k, res; + +void dfs(int u, int k, int last, int sum) { + if (k == 0) { + res = max(res, sum); + return; + } + if (u == n + 1) return; + + if (a[u] >= last) + dfs(u + 1, k - 1, a[u], sum + a[u]); + dfs(u + 1, k, last, sum); +} +int main() { + cin >> n >> k; + for (int i = 1; i <= n; i++) cin >> a[i]; + dfs(1, k, 0, 0); + cout << res; + return 0; +} \ No newline at end of file diff --git a/TangDou/LanQiaoBei/LanQiao14STEMA202212/TD.cpp b/TangDou/LanQiaoBei/LanQiao14STEMA202212/TD.cpp index 1a42174..008e0ec 100644 --- a/TangDou/LanQiaoBei/LanQiao14STEMA202212/TD.cpp +++ b/TangDou/LanQiaoBei/LanQiao14STEMA202212/TD.cpp @@ -1,27 +1,24 @@ #include - using namespace std; -const int INF = 0x3f3f3f3f; -const int N = 110; -int n; -int d; -int res = INF; +const int N = 100; int a[N]; -void dfs(int u, int r, int c) { - if (u == n + 1) { - res = min(res, c); +int n, k, res; + +void dfs(int u, int k, int last, int sum) { + if (k == 0) { + res = max(res, sum); return; } - if (r + d >= a[u + 1]) dfs(u + 1, r + d - a[u + 1], c + 1); - if (r >= a[u + 1]) dfs(u + 1, r - a[u + 1], c); + if (u == n + 1) return; + + if (a[u] >= last) + dfs(u + 1, k - 1, a[u], sum + a[u]); + dfs(u + 1, k, last, sum); } int main() { - cin >> n >> d; + cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; - dfs(0, 0, 0); - if (res == INF) - printf("-1"); - else - printf("%d", res); + dfs(1, k, 0, 0); + cout << res; return 0; } \ No newline at end of file