You are on page 1of 2

Bài 1 :

                Cho 2 số nguyên dương M,N (0<M,N100) và 2 dãy số nguyên : A1,


A2 , ... , AN  và B1, B2 , ... , B M . Hãy loại đi một số phần tử của 2 dãy sao cho các số còn
lại của 2 dãy ( giữ nguyên thứ tự cũ ) tạo thành 2 dãy như nhau và độ dài k là lớn nhất .
Ví dụ : N=8 M=12. Hai dãy nhập vào :
0   0   9   2   3   7   3   1
4   4   0   5   0   9   0   3   10   4   8   3
Dãy xuất : 0   0   9   3   3.
Giải thuật:
Cần xây dựng mảng C(N,M) với ý nghĩa :
- C[i,j] là độ dài của dãy còn lại nếu dãy A chỉ xét tới chỉ số i và dãy B chỉ xét tới chỉ số
j.
 C[1,j] = 0 nếu A[1] không có trong dãy B(j) ,ngược lại thì  C[1,j] = 1 ;
 C[i,1] = 0 nếu B[1] không có trong dãy A(i) ,ngược lại thì  C[i,1] = 1 .
 trường hợp còn lại C[i,j] được tính theo công thức truy hồi sau :

C[i,j] = Max{C[i,j-1],C[i-1,j],C[i-1,j-1]+x} 
( Vì :        nếu A[i]=B[j] thì C[i,j]= C[i-1,j-1]+1
nếu A[i] không có trong B(j) thì  C[i,j]= C[i-1,j]
nếu B[j] không có trong A(i) thì  C[i,j]= C[i,j-1] )
Bài 2: ( Bài Mã vạch  )         
                Cho bộ 3 số (N,M,K) nguyên không âm (N<=100,M,K<=33) . Người ta định
nghĩa mỗi bộ 3 số trên ứng với 1 mã là một xâu kí tự dạng nhị phân thoả mãn :
+ Chứa đúng N chữ số
+ Các chữ số 0 liền nhau hoặc các chữ số 1 liền nhau gọi là 1 vạch , phải có đúng M vạch
+ Số chữ số trong 1 vạch gọi là độ rộng của vạch . Độ rộng tối đa của vạch là K
+ Vạch đầu tiên của mã phải là vạch gồm các chữ số 1.
Giải thuật
                Cho bộ 3 số (N,M,K) nguyên không âm (N<=100,M,K<=33) . Người ta định
nghĩa mỗi bộ 3 số trên ứng với 1 mã là một xâu kí tự dạng nhị phân thoả mãn :
+ Chứa đúng N chữ số
+ Các chữ số 0 liền nhau hoặc các chữ số 1 liền nhau gọi là 1 vạch , phải có đúng M vạch
+ Số chữ số trong 1 vạch gọi là độ rộng của vạch . Độ rộng tối đa của vạch là K
+ Vạch đầu tiên của mã phải là vạch gồm các chữ số 1.
Lập trình thực hiện các yêu cầu sau :
1) Dữ liệu tổ chức như sau :
                - Dòng đầu là 3 số N,M,K
                - Dòng thứ 2 là số p
                - P dòng tiếp theo : mỗi dòng là một mã M i (0< i <P+1) của bộ mã (M,N,K)
2) Thông tin ra:
                - Dòng đầu là số nêu tổng số mã của bộ mã (N,M,K)
                - Tiếp theo gồm p dòng , mỗi dòng ghi 1 số là vị trí của mã M i  trong tự điển
xếp tăng các mã của bộ mã (N,M,K) .
15
Thí dụ 16
743 1001000 12
6 1000100  3
1110100 1101110  1
1101100 1110110 13
16
Giải thuật

Bài 3. Cho một dãy n số nguyên. Tìm tất cả các dãy con không giảm dài nhất.
a) Dãy con kề nhau.
b) Dãy con không kề nhau.

Bài 4. Cho mô ̣t dãy n số nguyên, tìm tất cả các dãy con (không kề nhau) có tổng bằng M.

Bài 6. Cho hai chuỗi ký tự C1 và C2, tìm chuỗi con chung (kề nhau) dài nhất của hai
chuỗi C1 và C2. Ví dụ C1=ABCAXTYAB, C2=QUABAXTBCA.

Bài 7. Cho hai chuỗi ký tự C1 và C2, tìm chuỗi con chung (không kề nhau) dài nhất của
hai chuỗi C1 và C2. Ví dụ
a) C1=AKLDEMGNIJ, C2=KALDMNEGOI.
b) C1=KZEIAOLHNM, C2=KEZAIOHLMN.
8. Bài tam giác vui vẻ
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
    Hình trên biểu diễn mô ̣t tam giác số. Hãy tính tổng lớn nhất của các số trên con đường
bắt đầu từ đỉnh và kết thúc đâu đó ở đáy. Cho biết mỗi bước có thể đi chéo xuống phía
trái hoặc đi chéo xuống phía phải. Giải bài toán này bằng phương pháp quy hoạch động.

You might also like