Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. 1. Đồng xu.
  2. Ví dụ, trạng thái trong bài này là số lượng xu nhỏ nhất để tổng bằng i, với i≤S. Để tìm ra trạng thái i, cần phải tìm tất cả các trạng thái j mà (j<i). Một khi đã tìm ra trạng thái i, ta có thể dễ dàng tìm ra trạng thái của i+1.
  3. Với mỗi j, Vj≤i, tìm số đồng xu nhỏ nhất để tổng bằng i−Vj. Giả sử nó bằng m. Nếu m+1 nhỏ hơn số lượng đồng xu hiện tại cho tổng i thì ta cập nhập nó bằng m+1.
  4.  
  5. Sau đây là ví dụ: Cho các đồng xu với giá tiền 1, 3 và 5. Và S = 11.
  6.  
  7. Đầu tiên, ta bắt đầu từ trạng thái 0, chúng ta có f[0]=0. Xét đến tổng 1. Có duy nhất đồng xu 1 nhỏ hơn hoặc bằng tổng 1, nên ta có f[1]=f[1−V0]+1=f[0]+1=1. Xét đến tổng 2. Cũng giống như tổng trước, chỉ có 1 đổng xu ≤ 2, có f[2]=f[2−V0]+1=f[1]+1=2 Đến tổng 3. Lần này có 2 đồng xu ≤ 3 là 1 và 3. - Nếu ta chọn đồng 1, ta có f[3]=f[3−V0]+1=f[2]+1=3 - Nếu ta chọn đồng 3, ta có f[3]=f[3−V1]+1=f[0]+1=1 Rõ ràng là 1 ≤ 3 nên ta chọn đồng 3 và f[3]=1 Xét tiếp đến tổng 4, rồi đến 11 bằng cách như trên.
  8.  
  9. Mã giả:
  10. ```
  11. Gán Min[i] bằng dương vô cùng với mọi i
  12. Min[0]=0
  13.  
  14. For i = 1 to S
  15. For j = 0 to N - 1
  16. If (Vj<=i AND Min[i-Vj]+1<Min[i])
  17. Then Min[i]=Min[i-Vj]+1
  18. Output Min[S]
  19. ```
  20.  
  21.  
  22. 2. Dãy con đơn điệu dài nhất
  23.  
  24. Hàm mục tiêu: f: độ dài dãy con.
  25.  
  26. Vì độ dài dãy con chỉ phụ thuộc vào một yếu tố là dãy ban đầu nên bảng phương án là bảng một chiều. Gọi Li là độ dài dãy con tăng dài nhất, các phần tử lấy trong miền từ A1 đến Ai và phần tử cuối cùng là Ai.
  27.  
  28. Nhận xét với cách làm này ta đã chia 1 bài toán lớn (dãy con của n số) thành các bài toán con cùng kiểu có kích thước nhỏ hơn (dãy con của dãy i số). Vấn đề là công thức truy hồi để phối hợp kết quả của các bài toán con.
  29.  
  30. Ta có công thức QHĐ để tính Li như sau:
  31.  
  32. L1=1. (Hiển nhiên)
  33. Li=max(1,Lj+1) với mọi phần tử j thỏa mãn: 0<j<i và Aj≤Ai
  34. Tính Li: phần tử đang được xét là Ai. Ta tìm đến phần tử Aj<Ai có Lj lớn nhất. Khi đó nếu bổ sung Ai vào sau dãy con ...Aj ta sẽ được dãy con tăng dần dài nhất xét từ A1...Ai.
  35.  
  36. 1.3. Cài đặt
  37. Bảng phương án là một mảng một chiều L để lưu trữ các giá trị của hàm QHĐ Li. Đoạn chương trình tính các giá trị của mảng L như sau:
  38. ```
  39. for i:= 1 to n do
  40. begin
  41. L[i]:=1;
  42. for j:=1 to i-1 do
  43. if (A[j]<=A[i]) and (L[i]<L[j]+1) then L[i]:=L[j]+1;
  44. end;
  45. ```
  46. Như vậy độ phức tạp bộ nhớ của bài toán là O(n), độ phức tạp thời gian là O(n2).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement