trang chủ / bài tập / savecity

Giải cứu thành phố

Đề bài

Mô tả

Một thành phố có n toà nhà xếp thành một hàng. Bản đồ mìn của thành phố là một xâu nhị phân độ dài n, trong đó ký tự thứ i bằng 1 nếu dưới toà nhà thứ i có mìn, và bằng 0 nếu không có.

Người rà mìn có thể thực hiện hai loại thao tác, mỗi loại lặp lại bao nhiêu lần tuỳ ý và theo thứ tự tuỳ ý:

  • Kích nổ một quả mìn đang có dưới toà nhà thứ x, tốn a đồng. Khi quả mìn này nổ, nó kích hoạt tiếp hai quả mìn ở hai vị trí x1x+1 (nếu ở đó có mìn), và phản ứng dây chuyền cứ thế lan ra. Nói cách khác, chỉ cần kích nổ một quả mìn bất kỳ là toàn bộ đoạn mìn liên tiếp chứa nó sẽ nổ hết.
  • Đặt thêm một quả mìn xuống một vị trí chưa có mìn, tốn b đồng.

Các vụ nổ không làm hư hại toà nhà nào. Hãy tìm số tiền nhỏ nhất cần chi để cuối cùng trong thành phố không còn quả mìn nào.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t: số lượng bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm hai dòng:
    • Dòng thứ nhất chứa hai số nguyên ab: chi phí kích nổ một quả mìn và chi phí đặt thêm một quả mìn.
    • Dòng thứ hai chứa xâu nhị phân mô tả bản đồ mìn.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra trên một dòng số tiền nhỏ nhất cần chi.

Ràng buộc

  • 1t105
  • 1a,b1000
  • Xâu bản đồ chỉ gồm các ký tự 01, có độ dài ít nhất 1.
  • Tổng độ dài các xâu trên tất cả các bộ dữ liệu không vượt quá 105.

Ví dụ

Input Output Giải thích
2
1 1
01000010
5 1
01101110
2
6
Bộ 1: hai đoạn mìn cách nhau 4 ô trống. Đặt thêm mìn để nối lại tốn 4 đồng, còn kích nổ riêng từng đoạn chỉ tốn 2×1=2 đồng, nên đáp án là 2.
Bộ 2: hai đoạn mìn cách nhau đúng 1 ô. Đặt một quả mìn vào ô đó tốn 1 đồng, sau đó kích nổ một lần tốn 5 đồng, tổng cộng 6 đồng.
3
6 2
10001000100001
10 5
11001100011
4 4
101001
24
30
12
Trong cả ba bộ, mỗi khoảng trống giữa hai đoạn mìn đều có chi phí lấp bằng đúng (hoặc lớn hơn) chi phí kích nổ thêm một lần, nên chọn cách nào cũng cho cùng kết quả.
Bộ 1: 4 đoạn mìn, chi phí 4×6=24.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0