Trêng THPT Chuyªn th¸i b×nh Chuyªn ®Ò: “Mét sè bµi to¸n quy ho¹ch ®éng thiªn vÒ c«ng thøc to¸n “ Ngêi viÕt: TrÇn V¨n §«ng Th¸i B×nh, th¸ng 8 n¨m 2012 “Mét sè bµi to¸n quy ho¹ch ®éng thiªn vÒ c«ng thøc to¸n “ I/ §Æt vÊn ®Ò. VÒ quy ho¹ch ®éng ®· cã qu¸ nhiÒu tµi liÖu, chuyªn ®Ò nãi ®Õn, ë ®©y chóng ta chØ xÐt mét sè bµi tËp khi gi¶I quyÕt nã nÕu suy nghÜ theo híng to¸n häc sÏ thuËn lîi h¬n (tÊt nhiªn vÉn cã thÓ gi¶I theo nhiÒu c¸ch). II. Bµi tËp. Bµi 1. §Õm ch÷ sè. Tªn ch¬ng tr×nh DEMCHUSO.??? Cho 2 sè nguyªn a vµ b (0 ≤ a ,b ≤ 1000 000 000). XÐt tÊt c¶ c¸c sè nguyªn n»m gi÷a a va b (kÓ c¶ 2 sè nµy). H·y ®Õm sè lîng tõng ch÷ sè thËp ph©n xuÊt hiÖn trong tÊt c¶ c¸c sè ®ã. VÝ dô, víi a = 1024 vµ b = 1032, ta cã d·y sè nguyªn: 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032. Trong d·y nµy cã 10 ch÷ sè 0, 10 ch÷ sè 1, 7 ch÷ sè 2, 3 ch÷ sè 3, 1 ch÷ sè 4, 1 ch÷ sè 5, 1 ch÷ sè 6, 1 ch÷ sè 7, 1 ch÷ sè 8, 1 ch÷ sè 9. D÷ liÖu: vµo tõ file v¨n b¶n DEMCHUSO.INP gåm nhiÒu dßng (nhng kh«ng qu¸ 5000). Mçi dßng øng víi 1 test chøa 2 sè nguyªn a vµ b. KÕt qu¶: §a ra file v¨n b¶n DEMCHUSO.OUT, kÕt qu¶ mçi test trªn mét dßng, gåm 10 sè nguyªn cho biÕt sè lîng c¸c ch÷ sè 0, 1, 2, . . .,9. Gi÷a 2 sè c¸ch nhau Ýt nh¸t 1 dÊu kho¶ng trèng. VÝ dô: DEMCHUSO.INP DEMCHUSO.OUT 1 10 1211111111 44 497 85 185 185 185 190 96 96 96 95 93 346 542 40 40 40 93 136 82 40 40 40 40 1004 502 107 105 100 101 101 197 200 200 200 200 Bµi 2. ViÕt sè Tªn ch¬ng tr×nh VIETSO.??? Cho 1 líi « vu«ng gåm 2 dßng vµ N cét. 1 ≤ N ≤ 109 . CÇn biÕt cã bao nhiªu c¸ch viÕt c¸c sè tõ 1 ®Õn 2N vµo líi, mçi sè 1 «, sè i vµ sè i + 1 ®îc viÕt vµo 2 « kÒ c¹nh. D÷ liÖu: Vµo tõ file VIETSO.INP gåm duy nhÊt 1 dßng chøa sè nguyªn N. KÕt qu¶: ®a ra VIETSO.OUT sè c¸ch viÕt. VÝ dô VIETSO.INP VIETSO.OUT 2 8 - Trang 2 - Bµi 3. Qua cÇu Tªn ch¬ng tr×nh CROSS.??? (Bµi 6 thi HSG Quèc gia n¨m 2012) Mét nhãm n b¹n ®i tËp v¨n nghÖ vÒ khuya. C¶ nhãm chØ cã mét chiÕc ®Ìn pin vµ ph¶i qua mét c©y cÇu gåm m ®o¹n, c¸c ®o¹n ®îc ®¸nh sè tõ 1 ®Õn m kÓ tõ bê ®ang ®øng sang bê bªn kia. Coi vÞ trÝ n b¹n ®ang ®øng lµ ®o¹n thø 0 vµ ®Çu cÇu bªn kia lµ ®o¹n thø m +1. C©y cÇu ®· cò, do ®ã cã 1 sè ®o¹n cÇu ®· háng vµ kh«ng thÓ ®i vµo ®îc, h¬n n÷a cÇu chØ chÞu ®ùng ®îc søc nÆng cña kh«ng qu¸ hai ngêi. §Ó qua cÇu an toµn c¸c b¹n ph¶i tæ chøc qua cÇu theo c¸ch sau: mçi lît chØ cã hai ngêi cÇm ®Ìn pin ®Ó cïng nhau qua cÇu vµ kh«ng ®îc ®i vµo nh÷ng vÞ trÝ ®o¹n cÇu ®· bÞ háng.. Sau khi hai ngêi qua ®Õn ®Çu cÇu bªn kia thi nh÷ng ngêi ®· qua cÇu ph¶i cö mét ngêi ®em ®Ìn pin trë l¹i ®Çu cÇu bªn nµy ®Ó c¸c b¹n kh¸c tiÕp tôc qua cÇu …Mçi ®¬n cÞ thêi gian, b¹n thø i cã thÓ bíc kh«ng qu¸ ri ®o¹n, nghÜa lµ nÕu b¹n thø i ®ang ®øng ë ®o¹n thø s cña c©y cÇu th× b¹n cã thÓ di chuyÓn vµo mét trong c¸c ®o¹n thø s+1, s+2, …,s+ ri nÕu ®o¹n ®ã kh«ng bÞ háng. ViÖc thùc hiÖn mét bíc ®i ®ßi hái 1 ®¬n vÞ thêi gian. Do ®ã cã thÓ cã ngêi qua cÇu nhanh h¬n. NÕu hai b¹n cïng qua cÇu th× hä ph¶i di chuyÓn qua cÇu víi thêi gian cña b¹n chËm h¬n. V× ®· qua khuya nªn c¶ nhãm bµn nhau tim c¸ch qua cÇu sím nhÊt cã thÓ ®îc. Yªu cÇu: Cho biÕt vÞ trÝ c¸c ®o¹n cµu bÞ háng vµ kh¶ n¨ng di chuyÓn cña tõng b¹n (®îc m« t¶ bëi c¸c sè r1, r2, …,rn). H·y tÝnh kho¶ng thêi gian ng¾n nhÊt ®Ó n b¹n qua ®îc cÇu. Gi¶ thiÕt r»ng lu«n cã c¸ch ®Ó c¶ nhãm vît qua cÇu. D÷ liÖu: Vµo tõ file v¨n ban CROSS.INP: • Dßng thø nhÊt chøa hai sè nguyªn d¬ng n vµ m t¬ng øng lµ sè b¹n trong nhãm vµ sè ®o¹n cña c©y cÇu ( n ≤ 10000, m ≤100000); • Dßng thø hai chøa n sè nguyªn d¬ng r1, r2, …,rn (ri ≤100, i = 1, 2, …,n); • Dßng th 3 cha mét x©u gåm m ký tù ‘0’ hoÆc ‘1’ m« t¶ tr¹ng th¸i cña c©y cÇu. Ký tù thø i cña x©u lµ ‘0’ nÕu ®o¹n thø i kh«ng bÞ háng cã thÓ ®i vµo ®îc, lµ ‘1’ nÕu ®o¹n cÇu th i bÞ háng kh«ng thÓ ®i vµo ®îc. C¸c sè trªn cïng mét dßng ®îc ghi c¸ch nhau Ýt nhÊt mét dÊu c¸ch. KÕt qu¶ : ghi ra file v¨n b¶n CROSS.OUT mét sè nguyªn lµ kho¶ng c¸ch thêi gian ng¾n nhÊt ®Ó n b¹n vît qua ®îc c©y cÇu. VÝ dô: CROSS.INP CROSS.OUT 35 8 224 00100 - Trang 3 - III. Ph©n tÝch Bµi 1. Gäi d[i] lµ sè ch÷ sè i cÇn t×m (i = 0 ..9) C¸ch thø nhÊt: c¸ch tù nhiªn nhÊt lµ xÐt tÊt c¶ c¸c sè tõ a ®Õn b (trong trêng hîp a > b) ta chØ viÖc ®æi 2 gi¸ trÞ cho nhau nh ë thñ tôc tinhd díi ®©y), víi mçi sè ta l¹i xÐt tõng ch÷ sè cña nã. Ta cã ch¬ng tr×nh con tÝnh m¶ng d nh sau: procedure tinhd; var i,j:longint; k:integer; begin for i:=0 to 9 do do d[i]=0; if a>b then begin j:=a; a:=b; b:=j; end; for i:=a to b do begin J:=i; while j > 0 do begin k := j mod 10; inc(d[k]); J:=j div 10; end; end; end; C¸ch nµy cùc kú ®¬n gi¶n, nhng ®é phøc t¹p cña thuËt to¸n lµ O(sè dßng x b x sè ch÷ sè cñ b) = O(5000 x 10 x109) =O(5 x 1013) ta chØ gi¶i quyÕt tèt khi a, b ≤ 104 . C¸ch thø 2: Gi¶ thiÕt a ≤ b. Nh c¸ch 1 ta lu«n cã thÓ ®¶m b¶o ®îc ®iÒu nµy. Gäi fa[i] lµ sè ch÷ sè i cña c¸c sè 1, 2, …a - 1. Gäi fb[i] lµ sè ch÷ sè i cña c¸c sè 1, 2, …b. Gäi kq[i] lµ sè ch÷ sè i cña c¸c sè a,a+1, …,b. (i = 0..9) Ta sÏ cã kq[i]:=fb[i]-fa[i]; §Ó tÝnh sè ch÷ sè i khi viÕt c¸c sè t 1 ®Õn x ta xhØ cÇn xÐt x. Gäi FX[i] lµ sè ch÷ sè i khi viÕt 1, 2, …,x, ta cã: FX[i] = Sè ch÷ sè i ë hµng ®¬n vÞ cña c¸c sè 1, 2, …x + Sè ch÷ sè i ë hµng chôc cña c¸c sè 1, 2, …,x + Sè ch÷ sè i ë hµng tr¨m cña c¸c sè 1, 2, …,x Ta thö xÐt ch÷ sè i ë hµng ®¬n vÞ: Sè x cã d¹ng xnxn-1….x0 hoÆc sx0 : Sè ch÷ sè 0 sÏ lµ s v× ta cã 10, 20, …s0. Ch÷ sè 1 ®Õn x0 -1 l¸ s+1 v× ta cã i,1i, 2i, …si Ch÷ sè x0 còng cã s+1. - Trang 4 - Ch÷ sè x0+1 ®Õn 9 lµ s. Ta h·y tÝnh sè c¸c ch÷ sè ë vÞ trÝ j tæng qu¸t X= sxjq. Trong ®ã q cã j ch÷ sè s cã n-j ch÷ sè ta cã: Sè ch÷ sè 0 ë vÞ trÝ nµy sÏ lµ s.10j nÕu xj > 0,ngîc l¹i lµ (s-1) x 10j + q+1 Sè ch÷ sè i, víi 1 < i xj lµ s s.10j Ta cã thÓ tæng qu¸t c¶ trêng hîp ch÷ sè hµng ®¬n vÞ. Ta cã thñ tôc tinh m¶ng fx nh sau: procedure tinhf(x:longint,var fx:mcso); var s,q,t:longint; i, k:integer; begin for i := 0 to 9 do fx[i] := 0; t:=1; q:=0; s :=x; while s > 0 do begin k:=s mod 10; s:=s div 10; If k > 0 then fx[0]:=fx[0] + s*t+q else fx[0]:=fx[0]+ (s-1)*t+q +1; for i:=1 to k-1 do fx[i]:=fx[i]+(s+1)*t; × k > 0 then fx[k]:=fx[k] + s*t+q + 1; for i:=k+1 to 9 do fx[i]:=fx[i] + s*t; q: = k*t + q; t:=t *10; end; end; Ch¬ng tr×nh chÝnh uses crt; type mcso=array[0..9] ß int64; const fi =’demchuso.inp’; fo =’demchuso.out’; Var a,b,j:longint; i:integer; fa,fb:mcso; f1,e2:text; procedure mofile; begin assign(f1,fi); reset(f1); assign(f2,fo); rewrite(f2); end; procedure tinhf(x:longint,var fx:mcso); var s,q,t:longint; i, k:integer; begin - Trang 5 - for i := 0 to 9 do fx[i] := 0; t:=1; q:=0; s :=x; while s > 0 do begin k:=s mod 10; s:=s div 10; If k > 0 then fx[0]:=fx[0] + s*t+q else fx[0]:=fx[0]+ (s-1)*t+q +1; for i:=1 to k-1 do fx[i]:=fx[i]+(s+1)*t; × k > 0 then fx[k]:=fx[k] + s*t+q + 1; for i:=k+1 to 9 do fx[i]:=fx[i] + s*t; q: = k*t + q; t:=t *10; end; end; Begin clrscr; mofile; while not eof(f1) do begin readln(f1,a,b); if a>b then begin j:=a; a:=b; b:=j; end; tinhf(a-1,fa); tinhf(b,fb); for i:=0 to 9 do write(f2,fb[i]-fa[i],’ ‘); writeln(f2); end; close(f1); close(f2); End. - Trang 6 - Bµi 2. §Ó tÝnh sè c¸ch viªt c¸c sè tõ 1 ®Õn 2N chóng ta cã thÓ thö viÕt sè 1 vµo 1 «, sau ®ã viÕt c¸c sè cßn l¹i. - NÕu viÕt 1 vµo « (1,1) : + ViÕt 2 vµo « (1,2): cã duy nhÊt 1 c¸ch viÕt. 1 2 ... n 2n ... n +1 + ViÕt 2 vµo « (2,1), lóc nµy 3 ph¶i viÕt vµo « (2,2). Bµi to¸n trë thµnh : t×m sè c¸ch viÕt 2(n-1) sè. Trong trêng hîp nµy ta cã c«ng thøc FG(n) = 1 + FG(n-1). Cã thÓ dung hµm ®Ö quy ®Ó tinh FG(n). Nhng nÕu xÐt thªm 1 chót n÷a ta dÔ dµng suy ra FG(n) = n. Víi n ≥ 2 ta cã 4 « gãc. 1 2 3 - NÕu viªt 1 vµo 1 « (1,j) , (1 < j < n) + 2 viÕt vµo « bªn ph¶i : øng dông kÕt qu¶ phÝa trªn sè c¸ch viÕt sÏ lµ j-1. 1 2 n-j … …. n-j+1 ….. 2(n-j)+1 2(n-j) …. + 2 viÕt vµo « bªn tr¸i : øng dông kÕt qu¶ phÝa trªn sè c¸ch viÕt sÏ lµ n-j. j 2 1 … …. J+1 2j 2j+1 ….. …. Nh vËy sè c¸ch viÕt trong trêng híp nµy lµ: n-j+j-1 = n-1. Víi 1 viÕt vµo « (2,j) ta ®îc kÕt qu¶ hoµn toµn t¬ng tù. Tæng hîp l¹i ta cã 4 « gãc, 2(n-2) « kh«ng ë gãc: KÕt qu¶ sÏ lµ: 4n + 2(n-2)(n-1) (*) c¸ch viÕt. Hµm F(x) sÏ cho ta sè c¸ch viÕt c¸c sè tõ 1 ®Õn 2x vµo líi vu«ng 2 dßng, x cét mµ sè i vµ sè i+1 kÒ c¹nh. function f(x:longint):int64; var y:int64; begin if x=1 then exit(2); y:=x; y:=4*y+2*(y-2)*(y-1); exit(y); End; {víi x = 1 lµ trêng hîp ®Æc biÖt, ®îc tÝnh riªng, cßn x = 2 mÆc du chØ cã 4 « gãc, c«ng thøc (*) vÉn ®óng}. - Trang 7 - Ch¬ng tr×nh chÝnh uses crt; const fi =’vietso.inp’; fo =’viet.out’; Var n:longint; f1,e2:text; procedure mofile; begin assign(f1,fi); reset(f1); assign(f2,fo); rewrite(f2); end; function f(x:longint):int64; var y:int64; begin if x=1 then exit(2); y:=x; y:=4*y+2*(y-2)*(y-1); exit(y); End; Begin clrscr; mofile; read(f1,n); writeln(f1,f(n)); close(f1); close(f2); end. - Trang 8 - Bµi 3. NhËn xÐt: ®Ó gi¶i quyÕt bµi to¸n nµy chóng ta ph¶i tiÕn hµnh qua 2 bíc. Bíc 1: TÝnh thêi gian qua cÇu nhanh nhÊt cho mçi b¹n. Bíc 2 : TÝnh thêi gian qua cÇu nhanh nhÊt cho c¶ nhãm. Nh vËy ta cã thÓ t¸ch bµi to¸n nµy thµnh 2 bµi to¸n nhá: Bµi to¸n 1: Cho c©y cÇu cã ®é dµi m, mét ngêi cã bíc dµi r, mçi ®¬n vÞ thêi gian ngêi ®ã cã thÓ bíc kh«ng qu¸ r ®o¹n, nghÜa lµ anh ta ®ang ë vÞ trÝ s th× cã thÓ bíc tíi c¸c vÞ trÝ s+1, s+2, …,s+r nÕu ®o¹n ®ã kh«ng bÞ háng. Bµi to¸n 1 dÔ dµng ®îc gi¶i quyÕt b»ng quy ho¹ch ®éng víi hµm tÝnh thêi gian nh sau: f(r) cho ta thêi gian nhanh nhÊt qua cÇu cña mät b¹n cã bíc nh¶y lµ r. function f(r:integer):longint; var d:aray[-100..100001] of longint; i,j:longint; begin for i:=1 to m+1 do d[i]:=100001; for i:=-100 to 0 do d[i]:=0; for i:=1 to m+1 do if x[i]=0 then for j:=i-r to i-1 do if d[i] > d[j]+1 then d[i]:=d[j]+1; f:=d[m+1]; end; Hµm nµy cã ®é phøc t¹p O(m. r2) Sau khi gi¶i quyÕt xong bµi to¸n 1, ta dÔ dµng tÝnh thêi gian cho tÊt c¶ c¸c b¹n b»ng c¸ch ¸p dông n lÇn sö dông hµm f. Trong trêng hîp nµy ®é phøc t¹p cña thuËt to¸n sÏ lµ O(n.m.r) lµ qu¸ lín. Tuy nhiªn do ri ≤100, nªn ta cã thÓ chØ cÇn tÝnh thêi gian 1 lÇn cho c¸c b¹n cã bíc dµi gi«ng nhau, bªn c¹nh ®ã. Tõ O(n.m.r) gi¶m xuèng cßn O(m.r2). Ta l¹i cã thÓ c¶i tiÕn hµm f nh sau: §é phøc t¹p lµ O(m) function f(r:integer):longint; var d:aray[-100..100001] of longint; i,j,v0,v1:longint; begin for i:=1 to m+1 do d[i]:=100001; for i:=-100 to 0 do d[i]:=0; v0:=0;v1:=0; for i:=1 to m+1 do if x[i]=0 then if v0+r > =i then begin d[i]:=d[v0]+1;v1:=i;end else begin d[i]:=d[v1] + 1;v0:=v1;v1:=i; end; f:=d[m+1]; End; Trong ®ã v0 lµ vÞ trÝ xa nhÊt cña bíc tríc ®ã. V1 lµ vÞ trÝ gÇn i nhÊt ®· ®îc bíc tíi. §Ó gi¶i quyÕt bµi to¸n 2 dÔ dµng ta cßn ph¶i tÝnh thêi gian cho c¸c nhãm, s¾p xÕp chóng theo thø tù t¨ng dÇn: viÖc nµy cã thÓ dÔ dµng gi¶i quyÕt víi suy luËn b¹n ri> rj th× ti ≤ tj Ta cã 3 m¶ng sau: - Trang 9 - sn[1..100] : s[r] sè b¹n cã bíc nh¶y r t[1..100] :t[r] thêi gian qua cÇu víi nhanh nhÊt víi bíc nh¶y lµ r. tg[1..10000] of longint tg[i] thêi gian qua cÇu cña b¹n nhanh thø i; procedure nhapdl; var f:text; i,r:integer; begin fillchar(sn,sizÌo(sn),0); assgn(f,fi); readln(f,n,m); for i:=1 to m do begin read(f,r); sn[r]:=sn[r]+1; end; readln(f); readln(f,x); close(f); end; procedure tinhtg; var ig,k:integer; begin for ig:=1 to 100 do if sn[ig]>0 then t[ig]:=f[ig]; k:=0; for ig:=100 downto 1 do for jg:=1 to sn[ig] do begin k:=k+1; tg[k]:=t[ig]; end; End; Bµi to¸n 2: §Ó qua cÇu nhanh nhÊt xÐt theo quan ®iÓm to¸n häc ta cã 2 sù u tien sau: - Ngêi cÇm ®Ìn trë l¹i ®Ó c¸c b¹n qua cÇu ph¶i lµ b¹n cã thêi gian nhá nhÊt trong c¸c b¹n ®· qua cÇu. - Ngêi chËm nhÊt cã thÓ ®i víi ngêi chËm nh× (®Ó gi¶m thêi gian qua cÇu) hoÆc ®i víi ngêi nhanh nhÊt (®Ó gi¶m thêi gian vÒ ®ãn). Ta cã thÓ gi¶i quyÕt riªng c¸c trêng ®Æc biÖt n = 1, kq = tg[1] n = 2, kq = tg[2] n = 3, kq = tg[1]+tg[2]+tg[3] Ta xÐt víi n = 4 Ta ký hiÖu (i,j) lµ b¹n i vµ b¹n j qua cÇu (i) b¹n i quay l¹i. Ph¬ng ¸n 1 theo u tiªn trªn (1,2) (1) (3,4)(2)(1,2) Thêi gian qua cÇu cña nhãm lµ T1 = tg[2]+tg[1]+tg[4]+tg[2]+tg[2]; (tg[3] ®îc Èn ®i) Ph¬ng ¸n 2 theo u tiªn trªn (1,2) (1) (1,3)(1)(1,4) Thêi gian qua cÇu cña nhãm lµ T2 = tg[2]+tg[1]+tg[3]+tg[1]+tg[4]; XÐt T1-T2 = 2tg[2] – (tg[1] + tg[3]) - Trang 10 - DÔ thÊy nÕu 2tg[2] < tg[1] + tg[3] ®i theo ph¬ng ¸n 1 lîi h¬n, ngîc l¹i ®i theo ph¬ng ¸n hai lîi h¬n. Më réng cho n b¹n (®· s¾p xÕp theo thêi gian t¨ng dÇn). Hµm tÝnh kÕt qu¶ nh sau: function tinhkq:longint; var k,i:integer; begin if n=1 then exit(tg[1]); kq:=0; k:=n; while (k>3) and (2tg[2] < tg[1] + tg[k-1]) do begin kq:=kq+tg[2]; {(1,2)} kq:=kq+tg[1]; {(1)} kq:=kq+tg[k]; {(k-1,k)} kq:=kq+tg[2] ; {(2)} k:=k-2; End; for i:=2 to k do kq:=kq+tg[i] ; {(1,i)} kq:=kq+(k-2)*tg[1]; exit(kq); end; §¸nh gi¸ ®é phøc t¹p: NhËp d÷ liÖu O(n+m) TÝnh thêi nhan theo c¸c nhãm O(m.r) TÝnh m¶ng tg O(n) TÝnh kÕt qu¶ O(n) Do nmax kh¸ nhá so víi mmax :§¸nh gi¸ chung O(m.r) r = max{ri}. Tõ ®©y ta cã thÓ t¨ng m ≤107 Ch¬ng tr×nh chÝnh uses crt; const fi =’cross.inp’; fo =’ cross.out’; Var f:text; n:integer; m:longint; sn:array[1..100] of integer; t:array[1..100] of longint; tg:aray[1..10000] of longint; procedure nhapdl; var f:text; i,r:integer; begin fillchar(sn,sizÌo(sn),0); assgn(f,fi); readln(f,n,m); for i:=1 to m do begin read(f,r); sn[r]:=sn[r]+1; - Trang 11 - end; readln(f); readln(f,x); close(f); end; function f(r:integer):longint; var d:aray[-100..100001] of longint; i,j,v0,v1:longint; begin for i:=1 to m+1 do d[i]:=100001; for i:=-100 to 0 do d[i]:=0; v0:=0;v1:=0; for i:=1 to m+1 do if x[i]=0 then if v0+r > =i then begin d[i]:=d[v0]+1;v1:=i;end else begin d[i]:=d[v1] + 1;v0:=v1;v1:=i; end; f:=d[m+1]; End; procedure tinhtg; var ig,k:integer; begin for ig:=1 to 100 do if sn[ig]>0 then t[ig]:=f(ig); k:=0; for ig:=100 downto 1 do for jg:=1 to sn[ig] do begin k:=k+1; tg[k]:=t[ig]; end; end; function tinhkq:longint; var k,i:integer; begin if n=1 then exit(tg[1]); kq:=0; k:=n; while (k>3) and (2tg[2] < tg[1] + tg[k-1]) do begin kq:=kq+tg[2]; {(1,2)} kq:=kq+tg[1]; {(1)} kq:=kq+tg[k]; {(k-1,k)} kq:=kq+tg[2] ; {(2)} k:=k-2; end; for i:=2 to k do kq:=kq+tg[i] ; {(1,i)} kq:=kq+(k-2)*tg[1]; exit(kq); - Trang 12 - end; procedure inkq; var g:text; begin; assign(g,fo); rewrite(g); writeln(g,tinhkq); close(g); end; Begin clrscr; nhapdl; tinhtg; inkq; end. - Trang 13 - .. .Một số toán quy hoạch động thiên công thức toán I/ Đặt vấn đề Về quy hoạch động có nhiều tài liệu, chuyên đề nói đến, xét số tập giảI suy nghĩ theo hớng toán học thuận lợi... FX[i] = Số chữ số i hàng đơn vị số 1, 2, x + Số chữ số i hàng chục số 1, 2, ,x + Số chữ số i hàng trăm số 1, 2, ,x Ta thử xét chữ số i hàng đơn vị: Số x có dạng xnxn-1.x0 sx0 : Số chữ số s ta... a - Gọi fb[i] số chữ số i số 1, 2, b Gọi kq[i] số chữ số i số a,a+1, ,b (i = 9) Ta có kq[i]:=fb[i]-fa[i]; Để tính số chữ số i viết số t đến x ta xhỉ cần xét x Gọi FX[i] số chữ số i viết 1, 2,