1. Trang chủ
  2. » Công Nghệ Thông Tin

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

7 501 5
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 736,08 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

Tôi : t

a

,

,

Trang 2

I

:

[i] (1<=i<=n) |a[i]|<=10^8 (k<=n)

C (|C|<=2*(10^9))

)

)

0,1

Var :byte; C longint; A array[ 18]of longint; x bestSelection:array[ 18]of byte; Procedure try( :byte); Var j k byte; Test:longint; Begin For :=0 to do begin x i]:=j if i n then try( + ) else begin test= ; for :=1 to do inc(test, [ ]*a k]); if (( test<=C and test>bestsum)) then begin

bestsum:=test; bestselection:=x end; end; End; End; Var :byte; bestsum, :longint; bestselection:longword; A array[ 18]of longint;

Procedure duyet; Var I k byte; Test:longint; S last:longword; Begin Bestsum:=0

Bestselection:=0

last:=(1 shl )- ;

For :=1 to last do begin Test:=0 For :=0 to - do inc(Test,((s shr ) and )*a i 1]); If Test>bestsum) and Test <= C then begin bestsum:= Test; bestselection:=s End; End; End; (n*(2^n) , , , th hi c ý

Trang 3

Var n:byte;

C,bestsum:longint;

A: array [1 18] of longint;

bestselection:longword;

Procedure duyettrangthaicocchan;

Var , :byte;

T : array [ 1 shl 18] of longint;

S p last:longword;

Begin

last:=( 1 shl )- ;

Bestsum:= 0 Bestselection:= 0 T 0]:=0

//Ti n hành duyệt các tr ng thái

For :=1 to last do begin

For :=0 to - do

If (((s shr ) and )=1 then break;

P:= and not 1 shl ));

0)

T s]:=T p [ + ];

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

Trang 4

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

Trang 5

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

Trang 6

cho thu trên:

const

fi = 'maxmatrix.inp' ;

fo = 'maxmatrix.out' ;

maxn = 20 ;

var n byte ; sum : int64 ; lasts : longword ;

a array[ maxn , maxn ]of longint ;

status :array[ ( 1 shl maxn )] of int64 ;

truy :array[ ( 1 shl maxn )] of byte ;

procedure doc ;

var f text ; i j byte ;

begin

assign ( , fi ); reset ( );

readln ( , );

for := 1 to do begin

for := 1 to do

read( , [ , ]);

readln ( );

end;

close ( );

end;

function bitoff ( : longword ; : byte ): longword ; begin

bitoff := s and not 1 shl ));

end;

function getbit ( : longword ; : byte ): byte ; begin

getbit :=( s shr ) and ;

end;

procedure ghi ;

var row :array[ maxn ]of byte ;

i j byte ; s longword ; f text ;

begin

assign ( , fo ); rewrite ( );

writeln ( , sum );

s := lasts ;

{row[i] mang nghĩa là ở hàng i, ta sẽ chọn cột row[i]}

for := n downto do begin

row [ ]:= truy [ ];

s := bitoff ( , truy [ ]- 1 );

procedure xuli ; var

i j k byte ; list1 :array[ maxn ]of byte ;

s p longword ; begin

status [ ]:= 0 lasts :=( 1 shl ) - 1 ; //trạng thái hoàn thành {Tính các trạng thái}

for := 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 := 0 to - do

if getbit ( , )= 1 then begin inc ( );

list1 [ ]:= i end;

{giả sử chọn cột đầu tiên}

j := list1 [ ]+ 1

p := bitoff ( , - );

truy [ ]:= j status [ ]:= status [ ]+ a k j ];

{xét các cột còn lại}

for := 2 to do begin

j := list1 [ ]+ 1

p := bitoff ( , - );

if status [ ]< status [ ]+ a k j then begin

status [ ]:= status [ ]+ a k j ]; truy [ ]:= j

end;

end;

end;

sum := status [ lasts ];

Trang 7

(n*(2^n))

IV

:

QBSELECT, QBGAME, CHESSCBG, LEM2, LEM3, MIXUP2, LASCALE, CHNREST (*), VMMTFIVE

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

🧩 Sản phẩm bạn có thể quan tâm

w