Các bài toán quy về xử lý trạng thái ppt

7 500 5
Các bài toán quy về xử lý trạng thái ppt

Đang tải... (xem toàn văn)

Thông tin tài liệu

  1/5  . Tôi :  t  . a. .. ,.   2/5 I.  : [i] (1<=i<=n) |a[i]|<=10^8.  (k<=n) C (|C|<=2*(10^9)) . . ). ) 0,1  . Var n:byte; C:longint; A:array[1 18]of longint; x,bestSelection:array[1 18]of byte; Procedure try(i:byte); Var j,k:byte; Test:longint; Begin For j:=0 to 1 do begin x[i]:=j; if (i<n) then try(I+1) else begin test=0; for k:=1 to n do inc(test,x[k]*a[k]); if ((test<=C)and (test>bestsum)) then begin . bestsum:=test; bestselection:=x; end; end; End; End; Var n:byte; bestsum,C:longint; bestselection:longword; A:array[1 18]of longint; Procedure duyet; Var I,k:byte; Test:longint; S,last:longword; Begin Bestsum:=0; Bestselection:=0;  last:=(1 shl n)- 1; . For s:=1 to last do begin Test:=0; For i:=0 to n-1 do inc(Test,((s shr I) and 1)*a[i+1]); If (Test>bestsum) and (Test <=C) then begin bestsum:= Test; bestselection:=s; End; End; End; (n*(2^n), , , th hic ý ng O(n*(2^n)) mt cách rõ ràng nht.   3/5   Var n:byte; C,bestsum:longint; A:array[1 18]of longint; bestselection:longword; Procedure duyettrangthaicocchan; Var I,k:byte; T : array[0 1 shl 18]of longint; . S,p,last:longword; Begin last:=(1 shl n)- 1; . Bestsum:=0; Bestselection:=0; T[0]:=0;  //Tin hành duyt các trng thái. For s:=1 to last do begin For i:=0 to n-1 do  If (((s shr i) and 1)=1) then break; P:= s and (not (1 shl i)); . 0) T[s]:=T[p] + a[i+1]; If (T[s]>bestsum) and (T[s]<=C) then begin bestsum:=t[s]; bestselection:=s; End; End; End; (i*(2^n)) i . N  . 1) i ngay khi i=0.   4/5 II.  Xét bài toán sau: CHESSCBG (https://vn.spoj.pl/problems/CHESSCBG/) Một bàn cờ thế là một bảng gồm 4 dòng, 4 cột. Mỗi thế cờ là một cách sắp xếp 8 quân cờ, hai quân khác nhau ở hai ô khác nhau. Bài toán đặt ra là cho hai thế cờ 1 và 2, hãy tìm một số ít nhất bước di chuyển quân để chuyển từ thế 1 sang thế 2; một bước di chuyển quân là một lần chuyển quân cờ sang ô trống kề cạnh với ô quân cờ đang đứng. Dữ liệu vào Từ file văn bản gồm 8 dòng, mỗi dòng là một xâu nhị phân độ dài 4 mà số 1/0 tương ứng với vị trí có hoặc không có quân cờ. Bốn dòng đầu là thế cờ 1, bốn dòng sau là thế cờ 2. Dữ liệu ra Gồm 1 dòng duy nhất là số bước chuyển quân ít nhất Ví dụ Input: 1111 0000 1110 0010 1010 0101 1010 0101 Output: 4 Thut toán:  c v 1 dãy 16bit, và chuyn thành 1 s hi th. Sau n hay BFS t nh này tnh kia và m s bài toán  th ng.   5/5 III. Quy H: sau:  *n. Output: . Sau khi  . :(n!) =20i /sy trong  s.  : .  jt j+1. T[SS S. {a,b,c, di ,b,c,d  T[ {1,2,5} = 10011= 19 : - T[ {2,5} = 10010 =18 } + a[3,1]; - T[ {1,5} = 10001 =17 } + a[3,2]; - T[ {1,2} = 00011 = 3 } + a[3,5]; 3. => T[19. t: T[s] = max (T[p] + a[k,j: s k = 1)  j S. [  = (1 shl n)-1 ]1 giây.  .   6/5   cho thu trên: const fi='maxmatrix.inp'; fo='maxmatrix.out'; maxn=20; var n:byte; sum:int64; lasts:longword; a:array[1 maxn,0 maxn]of longint; status:array[0 (1 shl maxn)] of int64; truy:array[0 (1 shl maxn)] of byte; procedure doc; var f:text; i,j:byte; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do begin for j:=1 to n do read(f,a[i,j]); readln(f); end; close(f); end; function bitoff(s:longword;i:byte):longword; begin bitoff:=s and (not (1 shl i)); end; function getbit(s:longword;i:byte):byte; begin getbit:=(s shr i) and 1; end; procedure ghi; var row:array[1 maxn]of byte; i,j:byte; s:longword; f:text; begin assign(f,fo); rewrite(f); writeln(f,sum); s:=lasts; {row[i] mang nghĩa là ở hàng i, ta sẽ chọn cột row[i]} for i:=n downto 1 do begin row[i]:=truy[s]; s:=bitoff(s,truy[s]-1); end; for i:=1 to n do writeln(f,a[i,row[i]],'[',i,',',row[i],']'); close(f); end; procedure xuli; var i,j,k:byte; list1:array[1 maxn]of byte; s,p:longword; begin status[0]:=0; lasts:=(1 shl n) - 1; //trạng thái hoàn thành {Tính các trạng thái} for s:=1 to lasts do begin {giải mã trạng thái s: list1 sẽ lưu các vị trí bit=1, k là số lượng bit=1, đồng thời cũng là dòng ta đang xét} k:=0; for i:=0 to n-1 do if getbit(s,i)=1 then begin inc(k); list1[k]:=i; end; {giả sử chọn cột đầu tiên} j:=list1[1]+1; p:=bitoff(s,j-1); truy[s]:=j; status[s]:=status[p]+a[k,j]; {xét các cột còn lại} for i:=2 to k do begin j:=list1[i]+1; p:=bitoff(s,j-1); if status[s]<status[p]+a[k,j] then begin status[s]:=status[p]+a[k,j]; truy[s]:=j; end; end; end; sum:=status[lasts]; end; begin doc; xuli; ghi; end  Do s hiu ct là  1i din cho ct i+1, Ta có th  li các ct 0n-i din cho chính ct i.   7/5 (n*(2^n)) IV.  : QBSELECT, QBGAME, CHESSCBG, LEM2, LEM3, MIXUP2, LASCALE, CHNREST (*), VMMTFIVE . status[0]:=0; lasts:=(1 shl n) - 1; / /trạng thái hoàn thành {Tính các trạng thái} for s:=1 to lasts do begin {giải mã trạng thái s: list1 sẽ lưu các vị trí bit=1, k là số lượng bit=1,. bài toán sau: CHESSCBG (https://vn.spoj.pl/problems/CHESSCBG/) Một bàn cờ thế là một bảng gồm 4 dòng, 4 cột. Mỗi thế cờ là một cách sắp xếp 8 quân cờ, hai quân khác nhau ở hai ô khác nhau. Bài. Output: 4 Thut toán:  c v 1 dãy 16bit, và chuyn thành 1 s hi th. Sau n hay BFS t nh này tnh kia và m s  bài toán  th ng.

Ngày đăng: 06/08/2014, 04:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan