luyencode / comments

Server lưu trữ bình luận trên Luyện Code
https://luyencode.net
6 stars 3 forks source link

https://oj.luyencode.net/problem/BLSCALES #842

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Chi tiết bài tập - Luyện Code Online

https://oj.luyencode.net/problem/BLSCALES

kakanvk commented 1 year ago

Dùng phương pháp sinh để tính tổng các tập con cũng AC nha

HuTaoVoTAo commented 1 year ago

Dùng phương pháp sinh để tính tổng các tập con cũng AC nha

anh ơi anh có thể nói rõ về phương pháp này được ko ạ? chứ em hỏi bác gg mà ko ra :)))

kakanvk commented 1 year ago

Dùng phương pháp sinh để tính tổng các tập con cũng AC nha

anh ơi anh có thể nói rõ về phương pháp này được ko ạ? chứ em hỏi bác gg mà ko ra :)))

Bạn dùng phương pháp sinh để tạo ra một tổ hợp các số dạng 0 và 1, ví dụ với n bằng 3 thì ta có các tổ hợp: 000, 001, 010, 011, 100, 101, 110, 111 với ý nghĩa: 0: không chọn số ở vị trí index đó để tính tổng. 1: chọn số ở vị trí đó để tính tổng. Dựa vào các dãy đó để tính tổng các quả cân. Sau khi tính và lưu trữ lại tất cả các trường hợp tổng của n quả cân có thể xảy ra vào một mảng (ví dụ mảng F), ta duyệt qua m khối lượng của mặt hàng, nếu mặt hàng thứ i tồn tại trong mảng F, tức là có thể cân được, ngược lại là không cân được.

Huygiaolala commented 1 year ago

không hiểu code sai ở đâu :V

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll n, f[1000001], m, d;
vector <ll> a;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
//    freopen("a.inp", "r", stdin);
//    freopen("a.out", "w", stdout);
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        cin >> f[i];
    }
    for(int i = 1; i <= m; i ++){
        cin >> d;
        ll s = n + 1;
        while(d != 0){
            s = upper_bound(f + 1, f + s, d) - f - 1;
            d -= f[s];
            if(s == 0 && d != 0)break;
        }
        if(d != 0) cout << 0;
        else cout << 1;
    }
}
quanghuy121 commented 1 year ago
Xem code AC ```cpp #include #include using namespace std; #define maxn int(1e6+6) #define ll long long ll a[maxn]; int n; map mp; void tryk(int i, ll sumx){ for (int j = 0; j<=1; j++){ if (j == 1) { sumx += a[i]; } if (i==n) { mp[sumx]++; } else tryk(i+1, sumx); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int m; cin >> n >> m; for (int i = 1; i<=n; i++){ cin >> a[i]; } tryk(1, 0); ll x; for (int i = 1; i<=m; i++){ cin >> x; if (mp[x] != 0) cout << 1; else cout << 0; } } ```