PROJECT - Dự án

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

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

Tỉnh Sơn La đang triển khai rất nhiều dự án xây dựng cơ sở hạ tầng cho Thành Phố. Tập đoàn xây dựng XYZ nhận được lời mời thầu ~n~ dự án (đánh số từ ~1~ đến ~n~). Sau khi tính toán thì tập đoàn này thấy để xây dựng dự án thứ ~i~ sẽ cần số vốn là ~c_i~ và sau khi hoàn thành sẽ thu hồi được vốn và thu được lợi nhuận là ~p_i~. Tập đoàn này có thể chọn thầu một số dự án bất kỳ trong danh sách trên và với những dự án được chọn, tập đoàn này phải bỏ toàn bộ vốn ra xây dựng và khi hoàn thành mới được thanh toán toàn bộ cả vốn lẫn lời.

Hiện tại, tập đoàn XYZ đang có số vốn là ~S~. Bạn hãy lập chương trình giúp cho tập đoàn này lựa chọn các dự án để nhận thầu sao cho có đủ vốn để xây dựng các dự án này và thu về lợi nhuận lớn nhất có thể nhé.

Input

  • Dòng đầu chứa hai số nguyên dương ~n~ và ~S~;
  • Dòng thứ hai chứa ~n~ số nguyên dương ~c_1, c_2, …, c_n~;
  • Dòng thứ ba chứa ~n~ số nguyên dương ~p_1, p_2, …, p_n~.

Hai số liên tiếp trên một dòng được ghi cách nhau một dấu cách.

Giới hạn:

  • ~1 ≤ n ≤ 25; 1 ≤ S ≤ 30000; 1 ≤ c_i, p_i ≤ 10000~

Output

  • Một số nguyên duy nhất là lợi nhuận lớn nhất có thể được.

Sample

Input #1
3 10
4 5 7
3 4 8
Output #1
8

Hint

Giải thích #1: Chọn thầu dự án số ~3~ thì có đủ vốn để xây dựng và thu được lợi nhuận là ~8~ (Nếu chọn thầu dự án số ~1~ và ~2~ thì cũng đủ vốn để xây dựng nhưng chỉ thu được lợi nhuận là ~7~).

Problem source: Chuyên Sơn La Online Judge


Bình luận

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



  • 0
    dainghiajustiin  đã bình luận lúc 4, Tháng 5, 2024, 17:17

    mình xin phép chia sẻ 2 cách làm của bài này tại đây ạ.


  • -8
    tri_88  đã bình luận lúc 12, Tháng 12, 2023, 10:47

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 1
    ngtuananh  đã bình luận lúc 12, Tháng 12, 2023, 10:42

    **#include <iostream>

    include <ctime>

    include <cstring>

    include <vector>

    define sync iosbase::syncwith_stdio(false); cin.tie(NULL);

    define endl '\n'

    using namespace std; const double TIME = (1.0 * clock() / CLOCKSPERSEC); long n,d; int main() { sync; //freopen("main.inp","r",stdin); //freopen("main.out","w",stdout); cin>>n>>d; vector <long> c(n+1); vector <long> p(n+1); for (int i=1;i<=n;i++) cin>>c[i]; for (int i=1;i<=n;i++) cin>>p[i]; //xuly long long dp[n+1][d+1]; memset(dp,0,sizeof dp); for (int i=1;i<=n;i++) { for (int f=1;f<=d;f++) { dp[i][f]=dp[i-1][f]; if (f>=c[i]) { dp[i][f]=max(dp[i][f],dp[i-1][f-c[i]]+p[i]); } } } cout<<dp[n][d]; cerr << "Time elapsed: " << TIME << "s" << endl; return 0; }

    full AC nha **