THPTTD_47 - Tổng fibonaci_k

Xem dạng PDF

Gửi bài giải

Điểm: 10,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: fibsum.inp
Output: fibsum.out

Tác giả:
Nguồn bài:
HSG THPT
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 4
    lephuochauhungvuong  đã bình luận lúc 11, Tháng 3, 2025, 7:49
    #include <iostream>
    #include <vector>
    #include <map>
    using namespace std;
    
    using ll = long long;
    
    const int inf = 2e18;
    
    int f[25];
    int p[103];
    int m, k;
    map<int,int> mp;
    int ans = 0;
    
    void backtrack(int id, int S){
        if(S >= m){
            if(S == m) ++ans;
            return;
        }
    
        for(int i = 1; i <= 10; i++){
            if(mp[f[i]] < k && f[i] >= p[id - 1]){
                mp[f[i]]++;
                p[id] = f[i];
                backtrack(id + 1, S + f[i]);
                mp[f[i]]--;
            }
        }
    }
    
    int main(){
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    
        freopen("fibsum.inp", "r", stdin);
        freopen("fibsum.out", "w", stdout);
    
        cin >> m >> k;
    
        f[0] = 1;
        f[1] = 1;
    
        for(int i = 2; i <= 10; i++) f[i] = f[i - 1] + f[i - 2];
    
        backtrack(1, 0);
    
        cout << ans;
    
        return 0;
    }
    

  • 0
    doanhdung  đã bình luận lúc 13, Tháng 1, 2025, 12:39

    oi oi oi baka baka


  • -1
    Uoao1807  đã bình luận lúc 14, Tháng 12, 2024, 13:10

    cho hỏi cái, tại sao phải thêm dòng

    freopen("fibsum.inp","r",stdin); 
    freopen("fibsum.out","w",stdout); 
    

    vào thì code mới chạy thế? code đúng mà chạy nãy h k được xong vào comment thấy dòng này nên copy vào code mà chạy được luôn


  • -4
    ______  đã bình luận lúc 26, Tháng 3, 2024, 1:53

    ai chỉ tui dc ko 😭😭😭😭😭


    • 5
      vudinhlong  đã bình luận lúc 26, Tháng 3, 2024, 5:09 chỉnh sửa
      1. Xây dựng mảng chứa các số fibo < 100 và mảng đếm có kích thước 100 j đấy để đếm số lầm xh

      2. Quay lui thôi, nhớ là điều kiện xét là lấy các số >= số vừa lấy í (để tránh lặp lại như: 1 1 2 2 và 1 2 1 2 hoặc 2 1 1 2...)

      3. Và nhớ xét cả số lần đã xh (chừng nào còn nhỏ hơn k thì đc xét), xét thì nhớ tăng số lần xh lên 1 đvi

      4. Nếu biết nhánh cận thì có thể giảm số lần đệ quy xuống (if sum + fb[i] <= n)

      => Cơ bản là như thế, bạn có thể tư duy thêm trong lúc làm thêm nhớ <3


      • 0
        ______  đã bình luận lúc 26, Tháng 3, 2024, 15:24

        ily <3