Trang chủ Tin Học Lớp 6 Bạn Nam là một vận động viên quần vợt chuyên nghiệp. Trong hệ thống thi đấu quần vợt, mỗi năm...
Câu hỏi :

Bạn Nam là một vận động viên quần vợt chuyên nghiệp. Trong hệ thống thi đấu quần vợt, mỗi năm người ta tổ chức n giải đấu đánh số từ 1 đến n. Giải đấu thứ i được tổ chức vào ngày ai và mỗi vận động viên tham gia được khoản tiền thưởng là bi. Tuy nhiên để đảm bảo sức khỏe cho Nam, huấn luyện viên quyết định hai giải đấu mà Nam chọn tham dự phải cách xa nhau ít nhất là k ngày ( |ai - aj| k) . Bạn hãy giúp Nam chọn lựa các giải thi đấu sao cho tổng số tiền thưởng là nhiều nhất. Dữ liệu nhập: - Dòng đầu tiên là hai số nguyên n và k cách nhau một khoảng trắng (1 n 100, 1 k 10) - Dòng thứ 2 gồm n số nguyên a1, a2, ..., an (1 ai 365) là ngày thi đấu của các giải, mỗi số cách nhau một khoảng trắng. Dữ liệu cho đảm bảo a1 < a2 < a3 < ...< an. - Dòng thứ 3 gồm n số nguyên b1, b2, ..., bn (1 bi 100) là số tiền thưởng của từng giải, mỗi số cách nhau một khoảng trắng. Dữ liệu xuất: - Là số nguyên xác định số tiền thưởng nhiều nhất mà Nam có thể có được. Ví dụ input 5 2 1 2 3 4 5 1 5 1 5 1 output 10 input 5 2 1 2 3 4 5 1 3 2 1 1 output 4

Lời giải 1 :

#pragma GCC optimize("03")
#include<bits/stdc++.h>
#define nmax 10000007
#define nmax2 1000006
#define nmax3 100005
#define mod 1000000007
#define fi first
#define se second
#define ma -1e18
#define mi 1e18
#define ll long long
using namespace std;
void start()
{
//    freopen(".inp","r",stdin);
//    freopen(".out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
}
ll qhd(ll n, ll k, const vector<int>& ngay, const vector<int>& tien) {
    vector<int> dp(n, 0);
    dp[0] = tien[0];

    for (int i = 1; i < n; i++) {
        dp[i] = tien[i];
        
        for (int j = i - 1; j >= 0; j--) {
            if (ngay[i] - ngay[j] >= k) {
                dp[i] = max(dp[i], tien[i] + dp[j]);
                break;
            }
        }

        dp[i] = max(dp[i], dp[i - 1]);
    }

    return dp[n - 1];
}

int main() {
    ll n, k;
    cin >> n >> k;
    vector<int> ngay(n);
    for (int i = 0; i < n; i++) {
        cin >> ngay[i];
    }
    vector<int> tien(n);
    for (int i = 0; i < n; i++) {
        cin >> tien[i];
    }
    cout << qhd(n, k, ngay, tien ); 
}/*ta sử dụng một hàm `qhd` để tính tổng số tiền thưởng nhiều nhất mà Nam có thể có được. Trong hàm này, ta sử dụng phương pháp quy hoạch động để tính toán. Ta duyệt qua từng giải đấu và lựa chọn giải đấu trước đó mà cách giải đấu hiện tại ít nhất là k ngày. Ta cập nhật tổng số tiền thưởng nếu có giải đấu trước đó tốt hơn để có tổng tiền thưởng lớn nhất. Cuối cùng, trả về tổng số tiền thưởng lớn nhất.*/

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 6

Lớp 6 - Là năm đầu tiên của cấp trung học cơ sở, chúng ta được sống lại những kỷ niệm như ngày nào còn lần đầu đến lớp 1, được quen bạn mới, ngôi trường mới, một tương lai mới. Hãy tận dụng cơ hội này để làm quen và hòa nhập thật tốt!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK