Ứng dụng quy hoạch động giải quyết các bài toán về chuỗi con và mảng con
1. Chuỗi con tăng dài nhất (Longest Increasing Subsequence)
Bài toán yêu cầu tìm độ dài của chuỗi con tăng dài nhất từ một mảng số nguyên cho trước. Các phần tử trong chuỗi con không nhất thiết phải nằm liên tiếp nhau nhưng phải giữ nguyên thứ tự xuất hiện.
Giải thuật quy hoạch động:
Chúng ta định nghĩa dp[i] là độ dài của chuỗi con tăng dài n ...
Đăng vào ngày 16 tháng 7 lúc 22:59
Phân tích và giải thuật cho các bài toán Codeforces Educational Round 161 (Div. 2)
Bài A — Kiểm tra khả năng xây dựng chuỗi đích từ hai nguồn
Bài toán yêu cầu xác định xem có thể tạo chuỗi c độ dài n sao cho mỗi ký tự c[i] phải trùng khớp với ít nhất một trong hai ký tự a[i] hoặc b[i]. Nếu mọi vị trí đều thỏa mãn, kết quả là "NO" (tức là không tồn tại ký tự nào ở c mà không xuất hiện tại cùng chỉ số ở a hoặc b); ngược lại, in ...
Đăng vào ngày 15 tháng 7 lúc 20:11
Chiến Thuật Constructive Và Greedy Trong Codeforces Round 892 Div 2
Bài toán A - Phân Chia Mảng Không Chia Hết
Bài toán yêu cầu chúng ta phân chia các phần tử từ một mảng gốc a vào hai mảng mới là b và c. Điều kiện bắt buộc là không được tồn tại bất kỳ cặp phần tử nào sao cho một số thuộc mảng b chia hết cho một số thuộc mảng c. Kết quả cần xuất ra kích thước của hai mảng mới cùng với các phần tử tương ứng.
Phâ ...
Đăng vào ngày 9 tháng 7 lúc 14:35
Phân Phối Đất Trong Làng A
Mục Lục
Mô Tả Bài Toán
Chiến Lược Giải Quyết
Giải Pháp Một
Giải Pháp Hai
Mã Tham Khảo
Giải Pháp Một
Giải Pháp Hai
Mô Tả Bài Toán
Trong quá trình cải cách đất đai, H là một đảng viên ưu tú cần giúp người dân trong làng A phân phối lại đất đai. Làng A có đất rất dài và hẹp, có thể coi nh ...
Đăng vào ngày 2 tháng 7 lúc 17:26
Phân Tích Các Vấn Đề Kỹ Thuật Trong Lập Trình C++
Các vấn đề kỹ thuật liên quan đến lập trình C++ có thể được phân tích và giải quyết thông qua các phương pháp sau:
Gỡ lỗi bằng cách sử dụng nhật ký (Logging)
Ví dụ về việc xây dựng cây nhị phân từ chuỗi trung thứ tự và hậu thứ tự, sử dụng cout để ghi lại quá trình chạy chương trình.
void logOutput(TreeNode* node) {
if (!node) return;
...
Đăng vào ngày 24 tháng 6 lúc 07:06
Traits trong C++: Cơ chế xác định và biến đổi kiểu tại thời điểm biên dịch
Các trait trong C++ là một tập hợp các template lớp được thiết kế đặc biệt để kiểm tra, trích xuất hoặc biến đổi thuộc tính của kiểu dữ liệu ngay trong quá trình biên dịch. Thư viện chuẩn cung cấp header <type_traits>, nơi định nghĩa hàng loạt cơ chế mạnh mẽ giúp lập trình viên thực hiện phân tích tĩnh về kiểu — từ việc xác định bản chất ...
Đăng vào ngày 21 tháng 6 lúc 22:38
Tìm kiếm nhị phân trong C++
Điều kiện áp dụng tìm kiếm nhị phân
Thuật toán tìm kiếm nhị phân chỉ hoạt động hiệu quả trên các cấu trúc dữ liệu đã được sắp xếp sẵn. Điều kiện tiên quyết là mảng phải có tính chất đơn điệu, cụ thể là đơn điệu không giảm hoặc đơn điệu không tăng.
Đơn điệu không giảm: Các phần tử tăng dần nhưng cho phép các phần tử liền kề bằng nhau
Đơn điệu ...
Đăng vào ngày 19 tháng 6 lúc 21:56
Khai thác thư viện thuật toán STL trong lập trình C++ hiện đại
1. Các thuật toán không làm thay đổi dữ liệu (Non-modifying)
Nhóm thuật toán này thực hiện việc đọc hoặc kiểm tra các phần tử trong container mà không làm biến đổi giá trị của chúng.
1.1. Truy vấn vị trí với find, find_if và find_end
find: Trả về iterator đến phần tử đầu tiên khớp với giá trị cần tìm.
find_if: Tìm kiếm dựa trên một đi ...
Đăng vào ngày 18 tháng 6 lúc 05:32
Cơ chế Friend và Quyền Truy cập Thành viên Riêng tư trong C++
Giới thiệu về Friend trong C++
Trong lập trình hướng đối tượng, nguyên tắc đóng gói yêu cầu các thành phần dữ liệu private chỉ được truy cập thông qua các phương thức public của chính lớp đó. Tuy nhiên, trong một số trường hợp thiết kế cụ thể, chúng ta cần cho phép một hàm bên ngoài hoặc một lớp khác truy cập trực tiếp vào các thành phần riêng ...
Đăng vào ngày 10 tháng 6 lúc 23:28
Giải pháp cho các bài toán lập trình từ ABC369
Bài A: Đếm số phần tử có thể chèn giữa hai số
Nếu hai số A và B khác nhau, kiểm tra xem hiệu của chúng có chẵn hay không. Nếu chẵn, có thể chèn một số ở giữa → tổng cộng 3 số. Nếu lẻ, chỉ có thể giữ nguyên hai đầu mút → 2 số. Trường hợp A == B, chỉ có duy nhất một giá trị.
#include <bits/stdc++.h>
using namespace std;
int main() {
in ...
Đăng vào ngày 10 tháng 6 lúc 04:51