Trang chủ Tin Học Lớp 7 Nhập từ bàn phím 3 số nguyên dương k, n, m, lần lượt là số lượng ngày, số lượng công...
Câu hỏi :

Nhập từ bàn phím 3 số nguyên dương k, n, m, lần lượt là số lượng ngày, số lượng công việc và số lượng kỳ nghỉ. Sau đó là n dòng miêu tả n công việc, mỗi dòng ghi 2 số nguyên dương a[i], b[i], lần lượt là số lượng ngày thực hiện công việc và số lượng tiền nhận được nếu thực hiện xong. Tiếp theo là m dòng miêu tả m kỳ nghỉ, mỗi dòng ghi 3 số nguyên dương x[i], y[i], z[i], là số lượng ngày nghỉ, số điểm vui vẻ nhận được và số tiền phải trả để có thể đi nghỉ. Tìm cách để sắp xếp lịch từ ngày 1 đến ngày k sao cho không công việc và kỳ nghỉ nào bị gối vào nhau, công việc/kỳ nghỉ cuối cùng kết thúc trước ngày k + 1, số lượng tiền không bao giờ dưới 0 và tổng số điểm vui vẻ nhận được là tối đa. In ra tổng số điểm vui vẻ tối đa nhận được. Mỗi ngày chỉ có thể tham gia tối đa 1 công việc hoặc 1 kỳ nghỉ. Đã tham gia công việc hay kỳ nghỉ nào phải tham gia trọn vẹn cả khoảng thời gian. Có thể có ngày nào đó không làm việc hay đi nghỉ. Một công việc hay 1 kỳ nghỉ có thể được lựa chọn nhiều lần. GIỚI HẠN + k 1000 + n, m 10 + a[i] k, b[i] 10 với mọi 1 i n + x[i] k, y[i], z[i] 109 với mọi 1 i m SUBTASK Subtask 1 (20 điểm): k 10 Subtask 2 (20 điểm): k 20 Subtask 3 (10 điểm): n = 1, m = 1 Subtask 4 (50 điểm): Không có điều kiện gì thêm giúp

Lời giải 1 :

#include<bits/stdc++.h>

using namespace std;

const int N=1010;
int m, k, n;
pair<int, int> a[N];
pair<pair<int, int>, int> b[N];

int main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> k >> n >> m;
   for (int i=1; i<=m; ++i) cin >> a[i].first >> a[i].second;
   for (int i=1; i<=n; ++i) cin >> b[i].first.first >> b[i].first.second >> b[i].second;
   sort(a+1, a+m+1);
   sort(b+1, b+n+1);
   int ans=0;
   for (int i=1; i<=k; ++i){
      int it=lower_bound(a+1, a+m+1, make_pair(i+1, 0))-a-1;
      if (it<1) continue;
      int money=a[it].second*(i/a[it].first);
      int rem=k-i;
      int res=0;
      for (int j=1; j<=n; ++j){
         int time=min(money/b[j].second, rem/b[j].first.first);
         res+=time*b[j].first.second;
         money-=time*b[j].second;
         rem-=time*b[j].first.first;
      }
      ans=max(ans, res);
   }
   cout << ans;
   return 0;
}

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 7

Lớp 7 - Năm thứ hai ở cấp trung học cơ sở, một chuỗi quay mới lại đến và chúng ta vẫn bước tiếp trên con đường học sinh. Học tập vẫn là nhiệm vụ chính, hãy luôn kiên trì và không ngừng cố gắng!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK