Trang chủ Tin Học Lớp 9 Một nhà máy chế biến hoa quả đang chế biến một sản phẩm từ táo. Nhà máy này đã có...
Câu hỏi :

Một nhà máy chế biến hoa quả đang chế biến một sản phẩm từ táo. Nhà máy này đã có một dây chuyền sản xuất gồm nhiều công đoạn. Trong công đoạn đầu tiên, có N quả táo với trọng lượng đã biết được đưa ngẫu nhiên lên băng chuyền thành hàng dọc và được đánh số từ 1 đến N.  

Chúng được ngầm phân thành M = [N/K] đoạn, mỗi đoạn gồm đúng K quả (N là bội của K). Các đoạn này cũng được đánh số từ 1 đến M, kể từ đầu băng chuyền. Do yêu cầu kỹ thuật, chúng cần được sắp xếp lại sao cho: 

• Đoạn 1 sẽ gồm K quả có trọng lượng lớn nhất trong số các quả có mặt trên băng chuyền. 

• Nếu M > 1 thì đoạn thứ i (i = 2,…,M) sẽ là K quả táo lớn nhất trong số các quả còn lại  

(không có mặt trong các đoạn từ 1 đến i-1). 

Một robot sẽ di chuyển dọc theo băng chuyền để thực hiện yêu cầu kỹ thuật nói trên. Mỗi thao tác của robot sẽ gồm việc rút ra khỏi băng chuyền 1 quả táo (các quả còn lại được dồn lại) rồi chèn quả táo này vào vị trí thích hợp trên băng chuyền (bao gồm cả vị trí đầu và cuối dãy). 

Yêu cầu: Hãy viết chương trình tính xem robot cần thực hiện ít nhất bao nhiêu thao tác để xếp lại số táo trên băng chuyền theo đúng yêu cầu kỹ thuật. 

Dữ liệu vào:

• Dòng đầu gồm hai số nguyên N và K (1 ≤ K ≤ N ≤ 5000); 

• Dòng thứ hai ghi N số nguyên Wi (1 ≤ Wi ≤ 1000, i = 1, 2,…, N) là số đơn vị trọng lượng của quả táo i. Các số trên cùng mỗi hàng đều được ghi cách nhau bởi ít nhất một dấu cách. 

Kết quả: một số nguyên, là số thao tác ít nhất mà robot cần thực hiện.

Ví dụ 1:

6 2

7 3 2 5 9 1

Kết quả: 2

Ví dụ 2:

6 3

7 8 9 5 3 5

Kết quả: 0

Giúp mình C++ nha, dùng quy hoạch động

Lời giải 1 :

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i];
    }
    sort (a . begin(), a . end(), greater<int>());
    vector<int> dp(n / k + 1, 0);
    dp[1] = k - 1;  
    for (int i = 2; i <= n / k; ++i)
    {   
        dp[i] = min(dp[i - 1] + k - 1, (i - 1) * k + k - 1);
    }
    cout << dp[n / k];  
}

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 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK