Knapsack tổng hợp

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Có ~N~ đồ vật được đánh số từ ~1~ đến ~N~. Đồ vật thứ ~i~ (~1 \leq i \leq N~) có khối lượng là ~w_i~ và giá trị là ~v_i~.

Taro quyết định chọn một số đồ vật bỏ vào chiếc túi của anh mang về. Sức chứa tối đa của chiếc túi là ~W~, nghĩa là tổng khối lượng các đồ vật có thể mang tối đa là ~W~.

Hãy tìm tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Lưu ý: Bài tập dưới đây bạn cần giải riêng ~3~ trường hợp (do ~3~ subtask này có giới hạn khác nhau). Dưới đây là code mẫu có thể follow theo

const int MAXN = 105;
int n, W;
int v[MAXN], w[MAXN];
namespace Subtask1 {
    bool check() {
        return n <= 20;
    }

    void solve() {}
}

namespace Subtask2 {
    bool check() {
        if (n > 100 || W > 100000) return false;
        return false;
    }

    void solve() {}
}

namespace Subtask3 {
    bool check() {
        if (n > 100) return false;
        bool check = true;
        for (int i = 1; i <= n; i++) {
            check &= (v[i] <= 1000);
        }
        return check;
    }

    void solve() {}
}

int main() {
    // Nhập input
    cin >> n >> W;
    for (int i = 1; i <= n; i++) {
        cin >> w[i] >> v[i];
    }

    if (Subtask1::check()) Subtask1::solve();
    else if (Subtask2::check()) Subtask2::solve();
    else {
        Subtask3::solve();
    }
}

Input

  • Dòng đầu tiên chứa hai số nguyên ~N~ và ~W~: số lượng đồ vật và sức chứa tối đa của chiếc túi.
  • ~N~ dòng tiếp theo, mỗi dòng chứa hai số nguyên ~w_i~ (~1 \leq w_i \leq W~) và ~v_i~ lần lượt là khối lượng và giá trị của đồ vật thứ ~i~.

Output

  • Xuất ra tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Scoring

  • Subtask ~1~ (~40\%~ số điểm): ~N \le 20~, ~1 \le W, V_i \le 10^9~.
  • Subtask ~2~ (~30\%~ số điểm): ~N \le 100, 1 \le W \le 10^5, v_i \le 10^9~.
  • Subtask ~3~ (~30\%~ số điểm): ~N \le 100, 1 \le W \le 10^9, 1 \le v_i \le 10^3~.

Example

Sample Input
3 8
3 30
4 50
5 60
Sample Output
90
Note

Chọn đồ vật ~1~ và ~3~. Tổng khối lượng sẽ là ~30+60=90~.


Knapsack 2

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Có ~N~ nhóm đồ vật được đánh số từ ~1~ đến ~N~. Nhóm vật thứ ~i~ (~1 \leq i \leq N~) gồm vô hạn đồ vật, mỗi đồ vật có khối lượng là ~w_i~ và giá trị là ~v_i~ (bạn có thể chọn ~0~ hoặc nhiều đồ vật thuộc nhóm này).

Taro quyết định chọn một số đồ vật bỏ vào chiếc túi của anh mang về. Sức chứa tối đa của chiếc túi là ~W~, nghĩa là tổng khối lượng các đồ vật có thể mang tối đa là ~W~.

Hãy tìm tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Input

  • Dòng đầu tiên chứa hai số nguyên ~N~ và ~W~: số lượng đồ vật và sức chứa tối đa của chiếc túi.
  • ~N~ dòng tiếp theo, mỗi dòng chứa ba số nguyên ~w_i~ (~1 \leq w_i \leq W~) và ~v_i~ lần lượt là khối lượng và giá trị của đồ vật thứ ~i~.

Output

  • Xuất ra tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Constraints

  • ~N \le 100~
  • ~W \le 10^5~
  • ~1 \le w_i \le W~
  • ~1 \le v_i \le 10^9~
  • Sample Input
2 7
2 3
3 4
Sample Output
10

Knapsack 3

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 100

Có ~N~ nhóm đồ vật được đánh số từ ~1~ đến ~N~. Nhóm vật thứ ~i~ (~1 \leq i \leq N~) gồm ~k_i~ đồ vật, mỗi đồ vật có khối lượng là ~w_i~ và giá trị là ~v_i~ (bạn có thể chọn ~0~ hoặc nhiều đồ vật thuộc nhóm này, tối đa là ~k_i~).

Taro quyết định chọn một số đồ vật bỏ vào chiếc túi của anh mang về. Sức chứa tối đa của chiếc túi là ~W~, nghĩa là tổng khối lượng các đồ vật có thể mang tối đa là ~W~.

Hãy tìm tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Input

  • Dòng đầu tiên chứa hai số nguyên ~N~ và ~W~: số lượng đồ vật và sức chứa tối đa của chiếc túi.
  • ~N~ dòng tiếp theo, mỗi dòng chứa ba số nguyên ~k_i~, ~w_i~ (~1 \leq w_i \leq W~) và ~v_i~ lần lượt là khối lượng và giá trị của đồ vật thứ ~i~.

Output

  • Xuất ra tổng giá trị các đồ vật lớn nhất mà Taro có thể mang về nhà.

Constraints

  • ~N \le 100~
  • ~W \le 10^4~
  • ~1 \le w_i \le W~
  • ~1 \le v_i \le 10^9~
Sample Input
3 10
2 3 5
3 2 3
1 5 10
Sample Output
18

Time limit: 1.0 / Memory limit: 256M

Point: 100

Cho dãy ~a~ gồm ~n~ phần tử nguyên dương. Hãy đếm số tổng khác nhau có thể tạo ra từ các dãy con không nhất thiết liên tiếp của ~a~ (không tính dãy rỗng).

Input

  • Dòng thứ nhất chứa số nguyên dương ~n~ miêu tả số phần tử trong dãy.
  • Dòng thứ hai gồm ~n~ phần tử miêu tả dãy ~a~.

Output

  • Gồm một số nguyên dương miêu tả kết quả bài toán.

Constraints

  • ~1 \le n \le 1000~
  • ~0 < a_i \le 1000~.

Subtasks

  • Subtask ~1~: ~n \le 20~ ~(30\%)~
  • Subtask ~2~: ~n \le 50~ ~(40\%)~
  • Subtask ~3~: Không có ràng buộc gì thêm ~(30\%)~

Sample Input 1:

3
1 4 5

Sample Output 1:

6

Sample Input 2:

4
1 1 1 1 

Sample Output 2:

4

Trò chơi

Nộp bài
Time limit: 1.0 / Memory limit: 1G

Point: 100

Một trò chơi có luật chơi như sau: Người chơi ban đầu có ~W~ năng lượng và trò chơi có ~N~ màn chơi, màn chơi thứ ~i~ có các thông tin như sau:

  • Năng lượng của màn chơi là ~m_i~ - mỗi khi chơi màn này, năng lượng sẽ giảm đi ~m_i~;
  • Điểm kinh nghiệm của màn chơi là ~e_i~ - người chơi thu được ~e_i~ điểm kinh nghiệm;
  • Trừ điểm kinh nghiệm khi chơi lại là ~s_i~ - mỗi khi chơi lại màn này, số điểm kinh nghiệm nhận được sẽ bị giảm đi ~s_i \times (k - 1)~ (với ~k~ là số lần chơi màn này). Tức là, số điểm kinh nghiệm thu được khi chơi màn chơi thứ ~i~ tại lần thứ ~k~ là ~e_i - s_i \times (k - 1)~;
  • Có thể chọn các màn chơi không cần theo thứ tự. Năng lượng của người chơi phải lớn hơn hoặc bằng năng lượng của màn chơi thì mới chơi được màn chơi đó.

Yêu cầu: Đưa ra tổng điểm kinh nghiệm lớn nhất có thể thu được khi chơi trò chơi trên.

Dữ liệu vào từ tệp văn bản GAME.INP:

  • Dòng đầu tiên gồm hai số nguyên dương ~N~ và ~W~ ~(N \le 2 \times 10^5;~ ~W \le 3000)~.
  • ~N~ dòng tiếp theo, dòng thứ ~i~ chứa ba số nguyên dương ~m_i, e_i, s_i~ ~(1 \le i \le N; \ m_i \le 3000; \ s_i \le e_i \le 10^5)~.

Kết quả ghi ra tệp văn bản GAME.OUT:

Gồm một số nguyên duy nhất là tổng điểm kinh nghiệm lớn nhất thu được thoả mãn yêu cầu đề bài.

Ví dụ

Input
2 10
2 6 2
5 5 5
Output
15
Giải thích
  • Lần ~1~: Chơi màn chơi thứ ~1~: Mất ~2~ năng lượng, điểm kinh nghiệm thu được là ~6~;
  • Lần ~2~: Chơi màn chơi thứ ~2~: Mất ~5~ năng lượng, điểm kinh nghiệm thu được là ~5~;
  • Lần ~3~: Chơi lại màn chơi thứ ~1~: Mất ~2~ năng lượng, điểm kinh nghiệm thu được là ~4~;

~\Rightarrow~ Vậy mất tổng cộng ~9~ năng lượng và tổng điểm kinh nghiệm thu được là ~15~.

Input
2 8
3 4 2
2 3 1
Output
9
Giải thích
  • Lần ~1~: Chơi màn chơi thứ ~1~: Mất ~3~ năng lượng, điểm kinh nghiệm thu được là ~4~;
  • Lần ~2~: Chơi lại màn chơi thứ ~1~: Mất ~3~ năng lượng, điểm kinh nghiệm thu được là ~2~;
  • Lần ~3~: Chơi màn chơi thứ ~2~: Mất ~2~ năng lượng, điểm kinh nghiệm thu được là ~3~;

~\Rightarrow~ Vậy mất tổng cộng ~8~ năng lượng và tổng điểm kinh nghiệm thu được là ~9~.

Ràng buộc

  • Có ~30\%~ số test ứng với ~30\%~ số điểm có ~N \le 2; \ W \le 20~;
  • ~20\%~ số test khác ứng với ~20\%~ số điểm có ~N, W \le 300~;
  • ~20\%~ số test khác ứng với ~20\%~ số điểm có ~N \le 1000~;
  • ~20\%~ số test khác ứng với ~20\%~ số điểm có năng lượng của màn chơi là như nhau;
  • ~10\%~ số test còn lại ứng với ~10\%~ số điểm không có ràng buộc gì thêm.

Bin Packing

Nộp bài
Time limit: 1.0 / Memory limit: 1G

Point: 100

Một xí nghiệp có một robot dùng để xếp các sản phẩm vào các thùng. Mọi thùng đều có dung tích như nhau. Có đúng hai thùng đang mở sẵn để robot xếp các sản phẩm vào. Mỗi thùng bất kỳ đều chứa được số sản phẩm mà tổng dung tích của chúng không vượt quá dung tích của thùng. Robot có thể thực hiện các thao tác sau:

  • Đưa một sản phẩm hiện tại trên dãy băng vào thùng ~1~,
  • Đưa một sản phẩm hiện tại trên dãy băng vào thùng ~2~,
  • Đóng thùng ~1~ và mở một thùng mới thay thế cho thùng ~1~,
  • Đóng thùng ~2~ và mở một thùng mới thay thế cho thùng ~2~.

Các thao tác 1, 2 chỉ có thể thực hiện nếu tổng dung tích của sản phẩm cho vào và các sản phẩm đã có trong thùng không vượt quá dung tích của thùng.

Yêu cầu: Cho biết dung tích mỗi thùng là ~𝑊~, dung tích của ~𝑛 sản~ phẩm trên dãy băng theo thứ tự xuất hiện là ~𝑎_1, 𝑎_2, . . . , 𝑎_𝑛~ , hãy tìm số thùng ít nhất để có thể cho ~𝑛~ sản phẩm vào thùng.

Input

  • Dòng thứ nhất là hai số nguyên ~𝑊~ và ~𝑛~;
  • Dòng tiếp theo chứa các số mô tả các số ~𝑎_1, 𝑎_2, … , 𝑎_𝑛~.

Output

  • Gồm một số duy nhất là số thùng ít nhất cần dùng.

Input

8 6
4 2 5 3 5 4

Output

3

Giải thích

  • Đưa ~1~ vào thùng ~1~
  • Đưa ~2~ ~3~ ~4~ ~5~ vào thùng ~2~ (cần mở thêm một thùng)
  • Đưa ~6~ vào thùng ~1~ (vẫn còn đủ chỗ, không cần mở thêm)

Ràng buộc

  • Subtask 1 [10 tests] ~𝑊 ≤ 10^9 ; 𝑛 ≤ 20~
  • Subtask 2 [10 tests] ~1 ≤ 𝑎_𝑖 ≤ 2; 𝑊 = 100; 𝑛 ≤ 10^6~
  • Subtask 3 [10 tests] ~𝑊 ≤ 30; 𝑛 ≤ 10000~
  • Subtask 4 [10 tests] ~𝑊 ≤ 5000; 𝑛 ≤ 100~
  • Subtask 5 [10 tests] ~𝑊 ≤ 5000 ; 𝑛 ≤ 10000~

Time limit: 1.0 / Memory limit: 256M

Point: 100

Chim là loài động vật đại diện cho sự tự do. Châu có nuôi 1 con chim tên là Ển, hiện đang sống tại tọa độ ~(0, 0)~ trên mặt phẳng Descartes và hướng về phía dương của trục ~Ox~. Châu đang có một chuỗi thao tác gồm một số thao tác xác định và chưa xác định:

  • ~F~ là 1 thao tác cố định yêu cầu chim đi chuyển 1 đơn vị về hướng hiện tại.
  • ~T~ là 1 thao tác chưa xác định. Bạn có thể chọn T là cho chim quay theo chiều kim đồng hồ 90 độ hoặc cho chim quay theo ngược chiều kim đồng hộ 90 độ.

Có ~Q~ truy vấn tương ứng là ~Q~ tọa độ ~(x,y)~. Châu muốn biết xem có thể chọn các thao tác ~T~ tương ứng để chim đến được tọa độ ~(x,y)~ không.

Input:

  • Dòng đầu tiên là ~Q~ – số lượng truy vấn.
  • Dòng thứ hai là xâu biểu diện các thao tác.
  • ~Q~ dòng tiếp theo mỗi dòng chứa tọa độ ~(x,y)~.

Output:

  • Dòng thứ ~i~ trả về YES nếu chim có thể đến được ~(x,y)~ ở truy vấn thứ ~i~, ngược lại NO.

Sample Test

Input:

2
FTFFTFF
3 2
0 1

Output:

Yes
No

Hình ví dụ cho truy vấn 1, xâu sau khi thay thế các kí tự T là FLFFRFF, L là quay ngược đồng hồ, R là quay xuôi đồng hồ.

Giới hạn:

  • Subtask 1 (20% số điểm): Độ dài các xâu không vượt quá ~20~ kí tự, ~Q \le 20~.
  • Subtask 2 (40% số điểm): Độ dài các xâu không vượt quá ~100~ kí tự, ~Q \le 100~.
  • Subtask 3 (40% số điểm): Độ dài các xâu không vượt quá ~4000~ kí tự, ~Q \le 10^5~.

Typing Master

Nộp bài
Time limit: 2.0 / Memory limit: 1G

Point: 100

Trong bài thi Tin học cuối kì, thầy giáo cho Bảo bài kiểm tra gõ mười ngón. Trước hôm thi một tuần, Bảo được thầy cho một từ điển để ôn tập. Từ điển gồm ~n~ từ đôi một phân biệt chỉ gồm các chữ cái in thường. Bảo có thể gõ một số từ lên màn hình soạn thảo văn bản, mỗi thao tác Bảo có thể thực hiện một trong hai hành động sau:

  • Gõ thêm một chữ cái in thường vào cuối văn bản đang gõ.
  • Xóa chữ cái cuối cùng của văn bản đang gõ, nếu văn bản có ít nhất một chữ cái.

Trong giờ kiểm tra, thầy giáo cho Bảo số nguyên ~m~. Ban đầu màn hình soạn thảo không có chữ cái nào.

Nhiệm vụ của Bảo là chọn ra ~m~ từ phân biệt trong từ điển thầy đã cho, và gõ tất cả các từ đấy theo thứ tự bất kì. Bài thi được coi là hoàn thành nếu tất cả các từ đều được gõ ít nhất một lần, và sau khi gõ xong màn hình soạn thảo trở về trạng thái ban đầu (không có chữ cái nào). Từ ~S~ được coi là đã được gõ nếu trong một thời điểm nào đó, văn bản hiển thị trên màn hình soạn thảo trùng khớp với từ ~S~.

Vì muốn đạt điểm cao, với mọi ~m~ từ ~1~ đến ~k~, Bảo muốn biết số thao tác ít nhất để hoàn thành bài thi nếu được chọn m từ phân biệt trong từ điển để gõ.

Input

  • Dòng đầu chứa hai số nguyên ~n, k~ ~(1 ≤ k ≤ n)~.
  • ~n~ dòng tiếp theo, mỗi dòng chứa một xâu kí tự chỉ gồm các chữ cái in thường mô tả một từ trong từ điển.

Dữ liệu đảm bảo tất cả các từ đôi một phân biệt, và tổng số chữ cái của tất cả các từ không vượt quá ~10^6~.

Output

  • In ra ~k~ dòng, dòng thứ ~m~ chứa một số nguyên là số thao tác ít nhất để Bảo hoàn thành bài thi nếu Bảo chọn ra ~m~ từ trong từ điển để gõ.

Subtask

  • Subtask ~1~ ~(10\%)~: ~n ≤ 18~, tổng số chữ cái của tất cả các từ không vượt quá ~100~.
  • Subtask ~2~ ~(20\%)~: ~n \le 100, k ≤ 50~, tổng số chữ cái của tất cả các từ không vượt quá ~500~.
  • Subtask ~3~ ~(20\%)~: ~n \le 1000, k ≤ 100~, tổng số chữ cái của tất cả các từ không vượt quá ~4 \times 10^5~.
  • Subtask ~4~ ~(30\%)~: ~n \le 2000, k ≤ 200~, tổng số chữ cái của tất cả các từ không vượt quá ~4 \times 10^5~.
  • Subtask ~5~ ~(20\%)~: ~n \times k \le 10^6~.

    Sample Input 1

3 3
a
b
abkc

Sample Output 1

2
4
10

Explanation 1

Ở ví dụ đề bài ta xét hai trường hợp:

  • ~m = 1:~ Chọn từ ~"a"~. Thao tác: ~"" \rightarrow "a" \rightarrow ""~
  • ~m = 2:~ Chọn hai từ ~"a"~ và ~"b"~. Thao tác: ~"" \rightarrow "a" \rightarrow "" \rightarrow "b" \rightarrow ""~
  • ~m = 3:~ Chọn cả ba từ. Thao tác: ~"" \rightarrow "a" \rightarrow "ab" \rightarrow "abk" \rightarrow "abkc" \rightarrow "abk" \rightarrow "ab" \rightarrow "a" \rightarrow "" \rightarrow "b" \rightarrow ""~