Tải bản đầy đủ (.doc) (17 trang)

CHUYEN DE 2 THUAT TOAN DUYET p1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (365.93 KB, 17 trang )

Cỏc phng phỏp thit k thut toỏn

Trng THPT Chuyờn Tr Vinh

BAỉI TOAN TOI ệU :

Bi toỏn ti u t hp l bi toỏn tỡm phng ỏn ti u trờn tp cỏc cu hỡnh t hp.
Nghim ca bi toỏn cng l mt vector x gm n thnh phn sao cho:
1.
2.
3.
4.

x = (x1,x2,xn)
xi ly giỏ tr trong tp Si
x tho món cỏc rng buc cho bi hm G(x).
F(x) min/max. (hm F(x) c gi l hm mc tiờu)

Khi ú x gi l mt phng ỏn ti u, F(x) l giỏ tr ti u.
1. Cỏc thut toỏn duyt:
Duyt ton b:
Mt trong nhng phng phỏp hin nhiờn nht gii bi toỏn ti u t hp t ra
l: trờn c s cỏc thut toỏn lit kờ t hp ta tin hnh duyt tng phng ỏn ca bi toỏn,
i vi mi phng ỏn ta iu tớnh giỏ tr hm mc tiờu ti ú, sau ú so sỏnh giỏ tr hm
mc tiờu ti tt c cỏc phng ỏn c lit kờ tỡm ra phng ỏn ti u.
Thut toỏn nhỏnh cn:

Trang

1



Các phương pháp thiết kế thuật tốn

Trường THPT Chun Trà Vinh

[

Procedure BranchBound(i);

// xây dựng thành phần thứ i

Begin
<Đánh giá các nghiệm mở rộng>;
If<các nghiệm mở rộng đều không tốt hơn BestSolution>
then exit;
<Xác đònh Si>;
for xi ∈ Si do
begin
<ghi nhận thành phần thứ i>;
if (tìm thấy nghiệm “i=n”) then BestSolution>
else BranchBound(i+1);
<Loại thành phần i >;
end;
Trong thủ tục trên, BestSolution là nghiệm tốt nhất đã biết ở thời điểm đó. Thủ tục nhật BestSolution> sẽ xác định “độ tốt” của nghiệm mới tìm thấy, nếu nghiệm mới tìm thấy tốt
hơn BestSolution thì BestSolution sẽ được cập nhật lại là nghiệm mới tìm được.

2. Một số ví dụ
BÀI TỐN NGƯỜI DU LỊCH

1. Bài tốn
Cho n thành phố đánh số từ 1 đến N và các tuyến đường giao thơng hai chiều giữa chúng, mạng
lưới giao thơng này được cho bởi bảng C[1..n,1..n], ở đây C ij = Cji là chi phí đi đoạn đường trực tiếp từ
thành phố i đến thành phố j. Một người du lịch xuất phát từ thành phố 1, muốn đi thăm tất cả các thành
phố còn lại mỗi thành phố đúng 1 lần và cuối cùng quay lại thành phố 1. Hãy chỉ ra cho người đó hành
trình với chi phí ít nhất. Bài tốn đó gọi là bài tốn người du lịch hay bài tốn hành trình của một thương
gia (Travelling Salesman Problem-TSP)
* Input: file TOURISM.INP có dạng:
- Dòng đầu chứa số thành phố n (1- n dòng tiếp theo, mỗi dòng n số mơ tả mảng C (chi phí này là số ngun dương ≤10000)
* Output: file TOURISM.OUT có dạng:
- Dòng đầu là chi phí ít nhất
- Dòng thứ hai mơ tả hành trình.

Trang

2


Các phương pháp thiết kế thuật tốn

Trường THPT Chun Trà Vinh

Ví dụ:
TUORISM.INP
4
0 20 35 42
20 0 34 30
35 34 0 12
42 30 12 0


TOURISM.OUT

Hình minh họa

97
1->2->4->3->1

2. Cách giải
1) Hành trình cần tìm có dạng (x1 = 1, x2, ..., xn, xn+1 = 1), ở đây giữa xi và xi+1: hai thành phố liên tiếp
trong hành trình phải có đường đi trực tiếp; trừ thành phố 1, khơng thành phố nào được lặp lại hai lần.
Có nghĩa là dãy (x1, x2, ..., xn) lập thành 1 hốn vị của (1, 2, ..., n).
2) Duyệt quay lui: x2 có thể chọn một trong các thành phố mà x 1 có đường đi tới (trực tiếp), với mỗi cách
thử chọn x2 như vậy thì x3 có thể chọn một trong các thành phố mà x 2 có đường đi tới (ngồi x 1). Tổng
qt: xi có thể chọn 1 trong các thành phố chưa đi qua mà từ xi-1 có đường đi trực tiếp tới (1 ≤ i ≤
n)
3) Nhánh cận: Khởi tạo cấu hình BestConfig có chi phí = +∞. Với mỗi bước thử chọn x i xem chi phí
đường đi cho tới lúc đó có < Chi phí của cấu hình BestConfig?, nếu khơng nhỏ hơn thì thử giá trị khác
ngay bởi có đi tiếp cũng chỉ tốn thêm. Khi thử được một giá trị x n ta kiểm tra xem xn có đường đi trực
tiếp về 1 khơng ? Nếu có đánh giá chi phí đi từ thành phố 1 đến thành phố x n cộng với chi phí từ xn đi
trực tiếp về 1, nếu nhỏ hơn chi phí của đường đi BestConfig thì cập nhật lại BestConfig bằng cách đi
mới.
Chương trình giải bài tóan người du lòch bằng PP nhánh cận (tham
khảo):
Program Nguoi_dulich;
{TT: ky thuat nhanh can}
Const
MAX =100; oo =1000000;
fi ='Tourism.INP'; fo ='Tourism.OUT';
Var

C :array[1..max,1..max]of integer;
x,bestway:array[1..max]of integer;

d : array[1..max] of boolean;
n,m :integer;
sum,best : longint;
Procedure input;
var
i, j, k: Integer; f: Text;
begin
Assign(f,fi); Reset(f);
ReadLn(f, n);
for i :=1 to n do
for j := 1 to n do
Read(f,C[i, j]);
Close(f);
end;
procedure update;

Trang

3


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

begin
if sum+C[x[n],x[1]]

begin
best:=sum+C[x[n],x[1]];
bestway:=x;
end;
end;
procedure branchBound(i:longint);
var j :longint;
begin
if sum>=best then exit;
for j:=1 to n do
if d[j] then
begin
x[i]:=j;
d[j]:=false;
sum:=sum + C[x[i-1],j];
if i=n then update
else branchBound(i+1);
sum:=sum - C[x[i-1],j];
d[j]:=true;
end;
end;
procedure init;
begin
fillchar(d,sizeof(d),true);
d[1]:=false;
x[1]:=1;
best:=oo;
end;
procedure output;
var f:text; i:longint;

begin
assign(f,fo); rewrite(f);
writeln(f,best);
for i:=1 to n do
write(f,bestway[i],'->');
write(f,bestway[1]);
close(f);
end;
BEGIN
input; init;
BranchBound(2);output;
END.

Trang

4


Các phương pháp thiết kế thuật tốn

Trường THPT Chun Trà Vinh

BÀI TẬP
PHƯƠNG PHÁP DUYỆT TỒN BỘ, NHÁNH CẬN
Bài 1. BÀI TỐN MÁY RÚT TIỀN TỰ ĐỘNG ATM:

Chương trình giải bài tóan ATM (tham khảo):
Program ATM_PP_NhanhCan;
Const MAX =20; fi ='ATM.INP';
fo ='ATM.OUT';

Type vector =array[1..MAX] of longint;
Var t, tmax :array[1..MAX] of longint;
x,xbest :vector;
c,cbest :longint;
n,s,sum :longint;
Procedure input;
var f :text;
i :longint;
begin
assign(f,fi); reset(f);
readln(f,n, s);
for i:=1 to n do read(f,t[i]);
close(f);
end;

Trang

5


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

Procedure init;
var i :longint;
begin
tmax[n]:=t[n];
for i:=n-1 downto 1 do begin
tmax[i]:=tmax[i+1];

if tmax[i]end;
sum:=0; c:=0; cbest:=n+1;
end;
Procedure update;
var i :longint;
f :text;
begin
if (sum = s) and (cxbest:=x; cbest:=c;
end;
end;
Procedure OUTPUT;
var i :longint;
f :text;
begin
assign(f,fo); rewrite(f);
if cbestwriteln(f,cbest);
for i:=1 to n do
if xbest[i]=1 then write(f,t[i],' ');
end
else write(f,'-1');
close(f);
end;
Procedure BranchBound(i:longint);
var j :longint;
begin
if c + (s-sum)/tmax[i] >= cbest then exit;
for j:=0 to 1 do begin

x[i]:=j;
sum:=sum + x[i]*t[i];
c:=c + j;
if (i=n) then update
else if sum<=s then branchBound(i+1);
sum:=sum - x[i]*t[i];
c:=c - j;
end;
end;
BEGIN
Input;
Init;
BranchBound(1);
Output;
END.

Trang

6


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

Bài 2: Trong một Hội chợ triển lãm có các gian hàng được bố trí trong một khung gồm NxN ô, mỗi ô
một gian hàng chứa các mặt hàng khác nhau. Từ một gian hàng muốn đi qua gian hàng khác ta có thể
đi theo 4 hướng: lên, xuống, trái, phải. Một người xuất phát từ ô [1,1] muốn đi xem tất cả các gian
hàng, mỗi gian hàng không quá 1 lần và không bỏ gian hàng nào, sau đó ra cửa ở ô [n,1]
Yêu cầu tìm các đường đi mà người đó có thể thực hiện được.

Input : số nguyên n (n<=10) . Output: gồm nhiều dòng, mỗi dòng là 1 đường đi.
Bài 3: Mã đi tuần: Cho bàn cờ có N x N ô. Một quân Mã được phép đi theo luật cờ Vua, đầu tiên
được đặt ở ô có tọa độ (x,y). Lập chương trình tìm tất cả các đường đi của quân Mã sao cho mọi ô
trên bàn cờ đều được quân Mã đi qua đúng 1 lần.
Bài 4: Truyền tin
Người ta cần truyền n gói tin được đánh số từ 1 đến n từ một điểm phát đến một điểm thu. Để
thực hiện việc truyền tin có thể sử dụng m đường truyền được đánh số từ 1 đến m. Biết rằng nếu
truyền j gói tin theo đường truyền tin I thì chi phí phải trả là S ij (Sij là số nguyên dương, Sij≤32767,
i=1,2,…,m, j=1,2,…,n)
Yêu cầu: Hãy xác định số lượng gói tin cần truyền theo mỗi đường truyền tin để việc truyền n gói
tin được thực hiện với tổng chi phí là nhỏ nhất.
Dữ liệu: vào từ file TTIN.INP:
+Dòng đầu tiên chứa hai số nguyên dương n va m (n,m<100).
+Dòng thứ i trong số m dòng tiếp theo chứa n số nguyên dương Si1, Si2,…,Sin, i=1,2,…,m.
Kết quả: Đưa ra file TTIN.OUT:
+Dòng đầu tiên chứa S là tổng chi phí phải trả theo cách tuyền tin tìm được.
+ Dòng thứ hai chứa m số nguyên không âm q 1,q2,…,qm, trong đó qi là số gói tin cần truyền theo
đường truyền tin i.
Ví dụ:
TTIN.INP
TTIN.OUT
33
4
20 20 20
0 2 1
4 3 10
1 3 20
Hướng dẫn:
Mỗi đường truyền i có thể truyền j gói tin (j=0,1,2,…,n-t, t là tổng các gói tin đã truyền trên i-1
đường truyền trước)

Do đó, mỗi một phương án truềyn tin là một chỉnh hợp lặp chặp m của n-t+1 phần tử {0,1,2,…,n-t} có
dạng q=(q1,q2,…,qm)
m

Giá của phương án là

f (q) = ∑ S[i, qi ]
i =1

Bài 5: Thuê máy
Một trung tâm có n máy tính (cấu hình giống nhau) dùng để cho thuê trong tháng (từ ngày 1 đến
ngày 31), thời gian thuê tính theo đơn vị ngày. Đầu tháng, trung tâm nhận được yêu cầu của m khách
hàng (đánh số từ 1 đến m), mỗi khách hàng cần thuê một máy trong một số ngày nào đấy thuộc tháng.
Giả thiết rằng, đối với mỗi khách hàng, hoặc trung tâm từ chối, hoặc trung tâm đồng ý cho thuê theo
đúng như yêu cầu của khách. Với mỗi ngày, gọi tần số sử dụng máy là số máy tính được sử dụng trong
ngày đó. Hãy lập một phương án cho thuê máy để tổng tần số sử dụng máy trong tháng là lớn nhất
* Dữ liệu: vào từ file THUEMAY.INP:
+Dòng đầu ghi các giá trị n,m.

Trang

7


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

+m dòng tiếp theo, theo thứ tự 1,2,..,m mỗi dòng ghi yêu cầu của một khách : bắt đầu là số ngày
mà khách cần thuê, tiếp theo là các ngày trong tháng mà khách cần thuê.

* Kết quả: Đưa ra file TTIN.OUT:
+ Dòng đầu ghi số khách được thuê.
+ Dòng tiếp theo ghi các số hiệu khách được thuê, các
dấu cách.
+ Dòng cuối cùng ghi tổng tần số sử dụng máy.
Hạn chế kích thước: số máy, số khách không quá 30.
Ví dụ:
* Hướng dẫn:
- Mỗi phương án cho thuê máy tính là một dãy nhị phân độ
dài m, x=(x1,x2,…,xm). xi ∈ {0,1}
- Điều kiện chấp nhận x là m
∑ ngay[i, j ]* x[i] ≤ n, j = 1,..31
i =1

m

- Giá của phương án là :

f (x) = ∑ sn[i ]* x[i ]
i =1

số hiệu này phân cách nhau ít nhất một
THUEMAY.INP
3 10
513467
11
236
3245
6123456
223

513467
524567
41245
3356

THUEMAY.OUT
6
2 6 7 8 9 10
20

Duyệt các dãy nhị phân độ dài m, kiểm tra các dãy là
phương án của bài toán, so sánh giá của các phương án với nhau để tìm phương án có giá lớn nhất.

Trang

8


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

Program HoiCho;
Const
max = 100;
fi='HOICHO.INP';
fo='HOICHO.OUT';
Hx : Array[1..4] of integer=(0,0,-1,1);
Hy : Array[1..4] of integer=(-1,1,0,0);
Var

Dd : Array[1..Max,1..max] of integer;
n, x, y, sn :integer;
f
:text;
{+ + + + + ++ + + + + + + + + + + + + + + +}
Procedure input;
begin
Assign(f,fi);Reset(f);
Readln(f,n);
Fillchar(Dd,sizeof(Dd),0);
x:=1; y:=1;
DD[x,y]:=1;
close(f);
end;
{+ + + + + ++ + + + + + + + + + + + + + + +}
Procedure ghinghiem;
var i,j : longint;
begin
if dd[n,1]=n*n then begin
sn:=sn+1;writeln(f,'Nghiem thu :',sn);
for i:=1 to n do begin
for j := 1 to n do write(f,dd[i,j]:5);
writeln(f);
end;
end;
end;
{+ + + + + ++ + + + + + + + + + + + + + + +}
Procedure Tim(t:integer);
var i, u, v : longint;
begin

for i := 1 to 4 do begin
u := x + Hx[i]; v := y + Hy[i];
if ((u>=1) and (u<=n)) and ((v>=1) and (v<=n)) then
if (dd[u,v]=0) then
begin
dd[u,v] := t; x := u; y := v;
if t=n*n then ghinghiem
else
Tim(t+1);
x := u - Hx[i]; y := v - Hy[i];
dd[u,v]:=0;
end;
end;
end;

Trang

9


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

{+ + + + + ++ + + + + + + + + + + + + + + +}
BEGIN
input;
assign(f,fo);rewrite(f);
tim(2);
if sn=0 then writeln(f,'Bai toan vo nghiem')

else writeln(f,'Bai toan co ', sn,' nghiem');
close(f); END.

HD Bài 3.
Program Ma_di_tuan;
Const max = 20; fi='MADITUAN.INP';
fo='MADITUAN.OUT';
Hx :Array[1..8] of integer=(2,1,-1,-2,-2,-1,1,2);
Hy : Array[1..8] of integer=(1,2,2,1,-1,-2,-2,-1);
Var
DD : Array[1..Max,1..max] of integer;
n, x, y, sn :integer; s : Set of 1..Max;
f : text;
Procedure input;
var i:integer;
begin Assign(f,fi);Reset(f); Readln(f,n,x,y);
Fillchar(Dd,sizeof(Dd),0); DD[x,y]:=1;
s:=[]; for i:=1 to n do S:=S+[i];
close(f);
end;
{===============================}
Procedure ghinghiem;
var i,j : longint;
begin
sn:=sn+1;writeln(f,'Nghiem thu :',sn);
for i:=1 to n do begin
for j := 1 to n do write(f,dd[i,j]:5);
writeln(f); end;
end;
{===============================}

Procedure Tim(t:integer);
var i, u, v : longint;
begin
for i := 1 to 8 do begin
u := x + Hx[i]; v := y + Hy[i];
if (u In S) and (v In S) then
if (dd[u,v]=0) then
begin
dd[u,v] := t; x := u; y := v;
if t=n*n then ghinghiem
else
Tim(t+1);
x := u - Hx[i]; y := v - Hy[i];

Trang

10


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

dd[u,v]:=0;
end;
end;
end;
{===============================}
BEGIN
input;

assign(f,fo);rewrite(f);
tim(2);
if sn=0 then writeln(f,'Bai toan vo nghiem')
else writeln(f,'Bai toan co ', sn,' nghiem');
close(f);
END.
Giải Bài 4: DI DAO
Const fi='DIDAO2.INP';fo='DIDAO2.OUT';
Type Dao=Record
x,y:integer;
end;
mangso=Array[1..100] of integer;
Var a:array[1..100] of Dao;
b,c:mangso;
DD:array[1..100] of Boolean;
i,j, DDmin,dem,d, dau,dich,n,sn:integer;
nhoi, m:real; Good:Boolean;
f,g:text;
Procedure input;
Var k:integer;
begin
readln(f,n);
For k:=1 to n do Read(f,a[k].x,a[k].y);
Readln(f); Readln(f,dau,dich);
Read(f,m);
Fillchar(b,sizeof(b),0);
Fillchar(c,sizeof(c),0);
Fillchar(DD,sizeof(DD),False);
DDMin:=maxint;
end;

Procedure Print(x:mangso;sl:integer);
var k:integer;
begin
sn:=sn+1;
for k:=1 to sl-1 do write(g,x[k],' -> ');
writeln(g,x[sl]);
end;
Function kc(i,j:integer):real;
begin
kc:=sqrt(sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y));
end;
Procedure thu(i:integer);
var j,k:integer;

Trang

11


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

begin
if d=dich then
begin
print(b,dem);
if (Sn=1) Or (dembegin
ddmin:=dem;

fillchar(c,sizeof(c),0);
for k:=1 to dem do c[k]:=b[k];
end;
end;
For j:=1 to n do
Begin
if (j<>i) and (Not DD[j]) then
begin
Good:=true;
for k:=1 to dem do
if (a[j].x=a[k].x) and (a[j].y=a[k].y) then Good:=false;
if Good and (kc(i,j)<=m) then
begin
dem:=dem+1;
b[dem]:=j;
DD[j]:=true;
d:=j;
thu(d);
b[dem]:=0;
dem:=dem-1;
DD[j]:=False;
end; end; end; end;
Procedure xuli;
begin
sn:=0; dem:=1; b[1]:=dau;
thu(dau);
if sn=0 then
writeln(g,'Khong co DD tu ', dau ,' den ',dich)
else {if (DDmin>0) and (ddminbegin

writeln(g,'Tong so duong di : ',sn);
writeln(g,'Duong di toi uu : ');
print(c,DDmin);
end
end;
Begin
openf;
input; nhoi:=maxint;
xuli;
closef;
end.

Trang

12


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

Program TRUYENTIN;
const
{ t la tong goi tin da truyen tren i-1
duong truyen truoc}
Fi = 'TTIN.INP';
Fo = 'TTIN.OUT';
max = 100;
Type vector=array[1..max,0..max] of integer;
var

s: vector;
f: Text;
n,m: integer;
q,qc:array[1..max] of integer;
min, tongcp, sn:longint;
procedure Nhap;
var i,j:integer;
begin
Assign(f, Fi); Reset(f);
ReadLn(f, n,m);
for i:=1 to m do begin
for j:=1 to n do read(f,s[i,j]);
readln(f);
end;
Close(f);
for i:=1 to m do s[i,0]:=0;
end;
{-----------------------------------------------------}
Procedure chon_min;
var i:integer;
begin
if (tongcp<>0) and (sn=n) then
if tongcpmin:=tongcp;
qc:=q;
end;
end;
{----------------------------------------------------}
procedure Tim(i: Integer); { moi duong truyen i co the truyen j goi tin}
var j, t, k : Integer; { j=0,1,2,...,n-t, t la tong cac goi tin da truyen tren i-1 duong truyen truoc}

begin
t:=0;
for k:=1 to i-1 do
t:=t+q[k];
for j:=0 to n-t do begin
q[i]:=j;
tongcp:=tongcp+s[i,j];
sn:=sn+j;
if i=m then chon_min
else if tongcp<=min then Tim(i+1);

Trang

13


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

tongcp:=tongcp-s[i,j];
sn:=sn-j;
end;
end;
{------------------------------------------------------}
procedure ghinghiem;
var i: Integer;
begin
Assign(f,fo);rewrite(f);
writeln(f,min);

for i := 1 to m do Write(f, qc[i],' ');
close(f);
end;
{-----------------------------------------------------}
begin
Nhap;
min:=maxlongint;
tongcp:=0; sn:=0;
Tim(1);
ghinghiem;
end.

Program ThueMay_tim_PA_toiuu;
{Thuat toan: Duyet cac day Nhiphan }
Const max = 30;
fi = 'THUEMAY.INP';
fo = 'THUEMAY.OUT';
Var f
: text;
n,m : byte;
ngay : array[1..max,1..31] of byte;
{ Ngay[i,j]=1 neu KH thu i dat thue
may trong ngay thu j,=0 neu khong thue}
x,xc,sn : array[1..max] of byte;
{x:p/an thu, xc: p/an toi uu;
sn: so ngay khach can thue}
tst,toiuu : integer;
{tst:tong tan so sd may trong thang}
{------------------------------------------------}
Procedure nhap;

var i,j,t:byte;
begin
Assign(f,fi); Reset(f); Readln(f,n,m);
fillchar(ngay,sizeof(ngay),0);
for i:=1 to m do begin
read(f,sn[i]);
for t:=1 to sn[i] do begin

Trang

14


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

read(f,j); ngay[i,j]:=1;
end;
readln(f);
end;
end;
{-------------------------------------------------}
function ok_x:boolean;
var i,j:byte; tsngay:integer;
{tsngay:tan so sd may trong 1 ngay}
begin
ok_x:=true;
for j:=1 to 31 do begin
tsngay:=0;

for i:=1 to m do tsngay:=tsngay+ngay[i,j]*x[i];
{so may dat thue trong ngay thu j}
if tsngay>n then
begin ok_x:=false; exit; end;
end;
end;
Procedure xuli;
begin
if ok_x then
if tst>Toiuu then
begin
Toiuu:=tst;
xc:=x;
end;
end;
procedure xuat;
var i,tsn_tu : byte;
{tsn_tu:tong so nguoi duoc dong y cho thue}
begin
assign(f,fo);Rewrite(f);
tsn_tu:=0;
for i := 1 to m do if xc[i]=1 then inc(tsn_tu);
writeln(f,tsn_tu);
for i:=1 to m do if xc[i]=1 then write(f,' ',i);
writeln(f);
writeln(f,Toiuu);
close(f);
end;
{----------------------------------------------------}
Procedure tim(i:byte);

var j : byte;
begin
for j := 0 to 1 do begin
x[i] := j;
tst:=tst+sn[i]*x[i];
if i = m then
xuli
else

Trang

15


Các phương pháp thiết kế thuật toán

Trường THPT Chuyên Trà Vinh

tim(i+1);
tst:=tst-sn[i]*x[i];
end;
end;
BEGIN
nhap;
toiuu:=0;
tst:=0;
tim(1);
xuat;
END.


Duyệt của tổ trưởng

Trà Vinh, ngày . . . tháng 10 năm 2018
Giáo viên soạn

----------------------------

--------------------------------

Trang

16



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×