

code c+++ nhá mn nhanh
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
int n;
long long a[50];
long long m;
vector<pair<long long,string>> A, B;
string ans;
void TryX(int i, long long sum, string s){
if (sum > m) return;
if (i > n/2){
A.push_back({sum, s});
return;
}
TryX(i + 1, sum, s + '0');
TryX(i + 1, sum + a[i], s + '1');
}
void TryY(int i, long long sum, string s){
if (sum > m) return;
if (i > n){
B.push_back({sum, s});
return;
}
TryY(i + 1, sum, s + '0');
TryY(i + 1, sum + a[i], s + '1');
}
int main(){
cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i];
cin >> m;
TryX(1, 0, "");
TryY(n/2 + 1, 0, "");
sort(B.begin(), B.end());
for (auto p : A){
long long need = m - p.fi;
auto it = lower_bound(B.begin(), B.end(), make_pair(need, string()));
if (it->fi == need){
ans = p.se + it->se;
break;
}
}
cout << ans;
}
Hãy giúp mọi người biết câu trả lời này thế nào?
#include <bits/stdc++.h>
using namespace std;
int n, t[45];
long long a[45], M;
void Try(int i, long long sum) {
if (sum > M) return;
if (i > n) {
if (sum == M) {
for (int j = 1; j <= n; j++) cout << t[j];
exit(0);
}
return;
}
t[i] = 1;
Try(i + 1, sum + a[i]);
t[i] = 0;
Try(i + 1, sum);
}
int main() {
freopen("CHONSO.INP", "r", stdin);
freopen("CHONSO.OUT", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
cin >> M;
Try(1, 0);
return 0;
}Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
36
915
20
Để làm bài này thì có 2 thuật: - Thuật 1 là backtrack thì chỉ chạy được đến n = 20 bạn nên biết thuật này trước - Thuật 2 là meet in the middle (đây là cách duyệt cải tiến với 1 số bài yêu cầu n = 40). Bạn có thể làm bài meet in the middle cơ bản ở trên cses phần advance technique Rút gọnĐể làm bài này thì có 2 thuật: - Thuật 1 là backtrack thì chỉ chạy được đến n = 20 bạn nên biết thuật này trước - Thuật 2 là meet in the middle (đây là cách duyệt cải tiến với 1 số bài yêu cầu n = 40). Bạn có thể làm bài meet in the middle cơ bản ở trê... xem thêm
487
1410
508
hay nha b