Giải bài ntucoder TILE - Chồng gạch

Thảo luận trong 'Khác' bắt đầu bởi nguyen minh duc, 17 Tháng sáu 2023.

  1. nguyen minh duc

    Bài viết:
    28
    Link bài:

    Thuật toán:


    • Những viên gạch to hơn chắc chắn sẽ đặt được nhiều viên gạch hơn lên trên nó.
    • Ta sắp xếp các viên gạch theo thứ tự tăng dần về độ cứng.
    • Chọn lần lượt từng viên gạch kèm theo ràng buộc về độ cứng nhỏ nhất trong chồng gạch được chọn, tránh tình trạng quá tải.

    VD: Viên gạch cứng nhất có độ cứng 50, nhưng viên gạch cứng thứ 2 có độ cứng 25 thì độ cứng của chồng 2 viên gạch trên là 25, tránh trường hợp chồng đủ 50 viên nhưng do vượt độ cứng của viên thứ 2 nên viên thứ 2 bị vỡ.

    Code:

    Mã:
    #include <bits/stdc++.h>
    using namespace std;
    
    int a[107], n, ans, x;
    
    void nang(int pos){
        x--; ans++;
        if (x < 0) cout << ans; else
        if (a[pos] < x && a[pos] > 0) {x = a[pos]; nang(pos+1);} else
        nang(pos+1);
    }
    
    int main(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("tile.inp", "r", stdin);
        //freopen("tile.out", "w", stdout);
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> a;
        sort(a+1, a+n+1, greater<int>());
        x = a[1];
        if (x == 0) cout << 1; else
        nang(2);
        
        return 0;
    }
     
  2. Đăng ký Binance
Trả lời qua Facebook
Đang tải...