Giải pháp lập trình cho các bài toán về Tổ hợp, Chuỗi, Quy hoạch động và Số học
A. Mua Vé Số (Buy Lottery Tickets)
Bài toán yêu cầu liệt kê tất cả các tổ hợp 6 số từ một danh sách các số nguyên đầu vào, với điều kiện là các số được chọn phải thỏa mãn tính chất tăng dần. Vì giới hạn của dữ liệu không quá lớn, chúng ta có thể sử dụng thuật toán tìm kiếm theo chiều sâu (DFS) kết hợp với kỹ thuật quay lui (backtracking) để giả ...
Đăng vào ngày 22 tháng 6 lúc 18:06
Giải bài toán từ AtCoder Beginner Contest 373
Bài A - Tháng Chín
Bài toán: Cho 12 chuỗi, hãy đếm số lượng chuỗi có độ dài bằng chỉ mục của nó.
Hướng tiếp cận: Duyệt qua từng chuỗi và kiểm tra điều kiện về độ dài.
Xem mã nguồn#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
vector<string> str ...
Đăng vào ngày 22 tháng 6 lúc 09:22
Kỹ Thuật Tối Ưu Hóa Quy Hoạch Động Trong Bài Toán Xách Túi
Thiết Lập Ký Hiệu
Để đảm bảo tính thống nhất trong các phần phân tích dưới đây, chúng ta định nghĩa các biến như sau:
n: Tổng số nhóm hoặc loại vật phẩm.
C: Giới hạn dung tích của túi (sức chứa).
weight[i]: Khối lượng tiêu hao của vật phẩm loại i.
value[i]: Giá trị thu được khi lấy vật phẩm loại i.
quantity[i]: Số lượng vật phẩm loại i có thể ...
Đăng vào ngày 21 tháng 6 lúc 18:47
Cây nhị phân
Các thuật toán phổ biến:
Tìm độ sâu tối đa của cây nhị phân.
Tìm độ sâu tối thiểu của cây nhị phân.
Duyệt theo mức của cây nhị phân.
Duyệt trước của cây nhị phân.
Duyệt giữa của cây nhị phân.
Duyệt sau của cây nhị phân.
Đếm số lượng nút trong cây nhị phân.
Đếm số lượng nút lá trong cây nhị phân.
Kiểm tra cây nhị phân có phải là cây cân bằng ha ...
Đăng vào ngày 21 tháng 6 lúc 08:06
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
Thuật toán xây dựng bảng ảo phương bậc lẻ
Mô tả bài toán
Bảng ảo phương kích thước N × N là một ma trận chứa các số nguyên liên tiếp từ 1 đến N² sao cho tổng các phần tử trên mọi hàng, mọi cột và hai đường chéo chính luôn bằng nhau. Khi kích thước N là số lẻ, việc lấp đầy ma trận này có thể được thực hiện tự động bằng một quy tắc dịch chuyển tọa độ chặt chẽ.
Phân tích thuật toán
Thay ...
Đăng vào ngày 15 tháng 6 lúc 20:43
Bài toán N Hậu
Bài toán N Hậu
Độ khó: Khó
Theo quy tắc cờ vua, quân hậu có thể tấn công các quân khác nằm cùng hàng, cùng cột hoặc cùng đường chéo.
Bài toán N Hậu nghiên cứu cách đặt n quân hậu lên bàn cờ kích thước n×n sao cho chúng không thể tấn công lẫn nhau.
Cho một số nguyên n, hãy trả về tất cả các cách đặt hậu khác nhau thỏa mãn điều kiện trên.
Mỗi giả ...
Đăng vào ngày 15 tháng 6 lúc 00:42
Bài tập thực hành con trỏ C++ - Xử lý chuỗi ký tự
Bài 1: Loại bỏ khoảng trắng ở đầu và cuối chuỗi
#include <iostream>
using namespace std;
char* xoaKhoangTrang(char* chuoi);
int main()
{
char s[1024]; // Khai báo mảng ký tự một chiều để lưu chuỗi
// Nhập một dòng ký tự, có thể chứa khoảng trắng
// Chuỗi nhập được lưu vào s, đọc tối đa 1024 ký tự, tự động thêm '\0' ở cuối
...
Đăng vào ngày 12 tháng 6 lúc 20:59
Giải thuật xử lý danh sách liên kết: Đảo ngược, hợp nhất và phát hiện chu trình
Đảo ngược danh sách liên kết
Một cách hiệu quả để đảo ngược danh sách liên kết là sử dụng kỹ thuật chèn đầu. Ta duyệt qua từng nút trong danh sách gốc, tách từng nút ra và chèn vào đầu danh sách mới. Trong quá trình này, cần lưu trữ con trỏ đến nút kế tiếp trước khi thay đổi liên kết.
struct ListNode* reverseList(struct ListNode* head) {
s ...
Đăng vào ngày 12 tháng 6 lúc 20:14
Kỹ thuật Hai Con trỏ và Ứng dụng trong Thuật toán
Tổng quan về kỹ thuật hai con trỏ
Kỹ thuật hai con trỏ (Two Pointers) là một phương pháp tối ưu hóa thuật toán hiệu quả, giúp giảm độ phức tạp thời gian trong nhiều bài toán. Thay vì sử dụng vòng lặp lồng nhau với độ phức tạp $O(n^2)$, ta sử dụng hai biến chỉ số (con trỏ) để duyệt qua cấu trúc dữ liệu, thường là mảng hoặc danh sách liên kết.
Cá ...
Đăng vào ngày 12 tháng 6 lúc 08:58