You are on page 1of 25

Mt s vn c s

ca Tin hc
Cu trc d liu v thut gii
Gio vin: T Thc Nhu
Khoa CNTT trng H Lc Hng

QUY HOCH NG
DYNAMIC
PROGRAMMING
2

Tng quan v phng php Quy hoch ng


Quy hoch ng thng dng gii cc bi ton ti u c bn
cht qui
Vic tm nghim ti u ca bi ton cho c thc hin da
trn vic tm nghim ti u ca cc bi ton con.
Kt qu ca cc bi ton con c ghi nhn li phc v cho
vic gii cc bi ton ln hn v gii c bi ton yu cu.

V d minh ha:
Dy Fibonnaci l dy cc s nguyn dng c nh ngha nh sau:

1
i2

F [i ]
F [i 2] F [i 1] i 2
int F(int i)

int F[100]; //Bang phuong an

void main()
{

if (i <= 2) return 1;

F[1] = F[2] = 1;

return F(i-2) + F(i-1);

for(int i = 3; i <= 6; i++)

F[i] = F[i-2] + F[i-1];

void main()

cout << F[6]<<endl;

{
}

cout<<F(6)<<endl;
}
4

Qu trnh gii bi ton bng quy hoch ng


1. Tm cng thc qui biu din nghim ti u ca bi ton
ln thng qua nghim ti u ca cc bi ton con.
i.

Xc nh tham s th hin kch thc bi ton

ii. Lp cng thc tnh ton kt qu bi ton theo tham s kch thc
iii. Xc nh kt qu bi ton con nh nht.

2. T chc d liu lu tr kt qu tnh ton (Bng phng n)


3. Da vo kt qu ghi nhn truy vt tm ra nghim ti u.

Bi ton ba l (knapsack)
Cho n gi hng. Gi hng th i c khi lng l A[i] v
gi tr C[i]. Cn chn nhng gi hng no b vo mt
ba l sao tng gi tr ca cc gi hng chn l ln
nht nhng tng khi lng ca chng khng vt qu
khi lng M cho trc. Mi gi ch chn 1 hoc khng
chn.
V d: n = 5; M = 13
i
A[i]
C[i]

1
3
4

2
4
5

3
5
6

4
2
3

5
1
1

Tng gi tr ca cc gi hng b vo ba l: 16
Cc gi c chn: 1(3, 4) 2(4, 5) 3(5, 6) 5(1, 1)
7

Tham s th hin kch thc bi ton


Kt qu bi ton l tng gi tr ln nht ca cc mn hng c
chn trong n mn sao cho tng khi lng khng ln hn M cho
trc, k hiu l F(n)
Tham s th hin kch thc bi ton l s mn hng n
Gi tr ca F(n) c th c tnh t gi tr ca F(n-1) cng thm
hoc khng cng thm gi tr ca mn hng th n nhng tng
khi lng khng ln hn M.
Nu chn thm mn hng th n th tng khi lng c chn
trong (n-1) mn hng khng ln hn (M-A[n])
Suy ra bi ton c 2 tham s: s mn hng v khi lng gii
hn

Lp cng thc qui


Gi F(i, v) l tng gi tr ln nht ca cc gi hng c chn trong
i gi hng sao cho tng khi lng khng ln hn v .
Trng hp A[i] > v:
F(i, v) = F(i -1, v)
Trng hp A[i] <= v:
Nu gi hng th i khng c chn th:
F(i, v) = F(i -1, v)
Nu gi hng th i c chn th:
F(i, v) = F(i -1, v A[i]) + C[i]
F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }
Bi ton nh nht ng vi i = 0 ta c: F(0, v) = 0
9

Xy dng bng phng n:


Cu trc bng phng n:
Dng mng F[0..n][0..M] cha gi tr ca cc F(i, v)
Cch tnh gi tr trn bng phng n:
in s 0 cho cc trn dng 0
S dng cng thc qui v gi tr trn dng (i -1) tnh
dng i
Trng hp A[i] > v:
F(i, v) = F(i -1, v)
Trng hp A[i] <= v:
F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }

10

V d bng phng n:
Trng hp A[i] > v: F(i, v) = F(i -1, v)
Trng hp A[i] <= v: F(i, v) = Max{ F(i -1, v); F(i -1, v A[i]) + C[i]) }

10

11

12

13

i
0

10

11

11

11

15

15

10

12

13

14

15

15

10

12

13

14

15

16

11

Thut ton to bng phng n


void TaoBangPhuongAn(F[0..n][0..M])
{
for (v=0; v <= M; v++) F[0, v] = 0; // in s 0 cho dng 0 ca bng
for (i = 1; i <= n; i++)
for (v=0; v <= M; v++)
{
F[i, v] = F[i-1, v];
If (A[i] <= v && F[i, v] < F[i-1, v - A[i] ] + C[i])
F[i, v] = F[ i-1, v - A[i] ] + C[i];
}
}
12

Truy vt tm li cc gi hng chn


Bt u t F[n, M] trn dng n ta d ngc v dng 0 theo nguyn tc:
Nu F[ i, v] <> F[i1, v]
th gi th i c chn, ta truy tip F[i-1, v-A[i]].
Nu F[ i, v] = F[i1, v]
th gi th i khng c chn, ta truy tip F[i-1, v].
C

10

11

12

13

i
0

10

11

11

11

15

15

10

12

13

14

15

15

10

12

13

14

15

16

13

Thut ton truy vt tm li cc gi hng chn


void TruyVet(F[0..n][0..M])
{

Bt u t F[n, M] trn dng n: i = n; v = M;


for (; i > 0; i --)
if (F[i, v] != F[i-1, v])
{
<Mn hng th i c chn >;
v = v A[i];
}

}
14

Bi ton ba l 2
Cho n loi hng. Mn hng thuc loi hng i c khi lng A[i] v
gi tr C[i]. S lng cc mn hng ca mi loi khng hn ch.
Cn chn cc mn hng trong tng loi b vo mt ba l sao
cho tng gi tr ca cc mn hng chn l ln nht nhng
tng khi lng ca chng khng vt qu khi lng M cho
trc. Cho bit s lng mn hng tng loi hng c chn
V d: n = 5; M = 13
i
A[i]
C[i]

1
3
4

2
4
5

3
5
6

4
2
3

5
1
1

Tng gi tr ca cc mn hng b vo ba l: 19
Cc mn c chn:
1 gi hng loi 1 c khi lng 3 v gi tr 4
5 gi hng loi 4 c khi lng 2 v gi tr 3
15

Xc nh cng thc quy


Gi F(i, v) l tng gi tr ln nht ca cc mn hng c chn sao
cho tng khi lng <= v trong i loi hng.
Trng hp A[i] > v: F(i, v) = F(i-1, v)
Trng hp A[i] <= v:
Nu loi hng i khng c chn th:
F(i, v) = F(i-1, v)
Nu c k mn hng loi i c chn: (1 <= k <= v/A[i] )
F(i, v) = F(i-1, v A[i]*k) + C[i]*k
Do :
F(i, v) = Max{F(i-1, v A[i]*k) + C[i]*k } k [0, v/A[i]]
Bi ton nh nht ng vi i = 0 hay v=0 ta c: F(0, v) = 0
16

Cng thc quy


Gi F(i, v) l tng gi tr ln nht ca cc mn hng c chn c
tng khi lng <= v trong i loi hng u tin
Vi i = 0 :

F(i, v) = 0

Vi i > 0 :
A[i] > v : F(i, v) = F(i - 1, v)
A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k }
vi k [0, v/A[i]]

17

Xy dng bng phng n:


Cu trc bng phng n: dng 2 mng
Mng F[0..n][0..M]: F[i, v] cha gi tr ca cc F(i, v)
Mng S[1..n][1..M]: S[i,v] cha s mn hng loi i c chn
Nu F(i, v) = F(i - 1, v): S[i, v] = 0
Ngc li S[i, v] = k
Cch tnh gi tr trn bng phng n:
in s 0 cho cc trn dng 0 v ct 0 ca bng F
S dng cng thc quy v gi tr trn dng i -1 tnh
dng i ca bng F v bng S

18

V d: Lp bng phng n F
Vi i > 0 :
A[i] > v : F(i, v) = F(i - 1, v)
A[i] <= v : F(i, v) = Max{ F(i-1, v A[i]*k) + C[i]*k }
vi k [0, v/A[i] ]
Bng F[i, v]
C[i] A[i]

10 11 12 13

i
0

12

12

12

16

16

12

13

14

16

17

10 12

13

14

16

17

10

11 13

14

16

17

19

10

11 13

14

16

17

19

19

V d lp bng phng n S
C[i] A[i]

10 11 12 13

i
0

Bng

12

12

12

16

16

F[i, v]

12

13

14

16

17

10 12

13

14

16

17

10

11 13

14

16

17

19

10

11 13

14

16

17

19

10 11 12 13

C[i] A[i]

v
i

Bng

S[i, v]

20

10

Thut ton to bng phng n


void TaoBangPhuongAn(F[0..n][0..M], S[1..n][1..M])
{

<in s 0 cho dng 0 v ct 0 ca bng F[0..n][0..M]>;


for (i = 1; i <= n; i++)
for (v=1; v <= M; v++)
{

F[i, v] = F[i-1, v];


S[i, v] = 0;
If (v >= A[i])
for(k = 1; k <= v/A[i]; k++)
if (F[i, v] < F[i-1, v - A[i]*k ] + C[i]*k)
{

F[i, v] = F[i-1, v - A[i]*k ] + C[i]*k;


S[i, v] = k;

}
}
}
21

Truy vt tm li cc gi hng chn


Bt u t S[n, M] trn dng n ta d ngc v dng 1 theo nguyn tc:
Nu S[i, v] <> 0 th :
Loi hng i c chn vi s lng l S[i, v]
Truy tip S[i-1, v - S[i, v]*A[i] ].
Nu S[i, v] = 0 th :
Loi hng i khng c chn,
Truy tip S[i-1, v].
C[i] A[i]

10 11 12 13

i
4

22

11

Thut ton truy vt tm li cc gi hng chn


void TruyVet(S[1..n][1..M])
{ i = n; v = M
while (i > 0)
{
if (S[i, v] != 0)
{
<in s lng gi hng i trong S[i, v] >;
v = v S[i, v]*A[i];
}
i = i 1;
}
}
23

Bi ton dy con c tng chia ht cho k


Cho mt dy A gm n s nguyn v mt s nguyn dng k.
Hy tm mt dy con (khng nht thit phi lin tip nhau)
di nht c tng cc s chia ht cho s k.
V d: n = 6 v k = 5
I

Dy A[i]

11

12

20

Chiu di dy con: 4
Cc phn t c chn l : 1 2 5 6
C gi tr tng ng l : : 11 6 20 8

24

12

Nhc li php ton mod


Gi s

r = a mod k v z = b mod k

Ta c:
1. (a + b) mod k = (r + z) mod k
2. (-r) mod k = (-r + k) mod k
3. (r + z) mod k = v z = (v r) mod k = (v r + k) mod k
I

A[i]

11

12

20

A[i] = A[i] % 5

25

Xc nh tham s
Gi F(i) = chiu di dy con di nht trong min [1..i] c tng chia ht
cho k.
1. Nu dy con di nht khng c A[i] th F(i) = F(i-1)
Vi F(i-1) = chiu di dy con di nht trong min [1..i-1] c tng
chia ht cho k
2. Nu dy con di nht c cha A[i]: th F(i) = F( i-1) + 1
Gi r = A[i] mod k
Nu r = 0: th F(i-1) = chiu di dy con di nht trong min [1..i1] c tng chia ht cho k
Nu r > 0 : do (r + k - r) mod k = 0 nn F(i-1) bng chiu di dy
con di nht trong min [1..(i-1)] c tng chia vi k d (k-r)
Tham s th hin kch thc ca bi ton: kch thc min v s d
ca tng chia vi k

26

13

Lp cng thc qui


Gi F(i, v) = chiu di dy con di nht trong min [1..i] c tng
chia vi k d l v.
1. Nu dy con di nht khng c A[i] th F(i, v) = F(i-1, v)
2. Nu dy con di nht c cha A[i]:
Gi r = A[i] mod k ta c F(i, v) = F(i-1, v - r) + 1
Nu v r = 0 : F(i, v) = F(i-1, 0) + 1
Nu v r > 0 v F(i-1, v - r)>0: F(i, v) = F( i-1, v - r) + 1
Nu v r < 0 v F(i-1, v-r+k)>0: F(i, v) = F( i-1, v-r+k) + 1
thay (v - r) mod k = (v r + k) mod k

Bi ton nh nht ng vi i = 1:
F(1,v)= 0 nu r <> v
F(1,v)= 1 nu r = v
27

Cng thc quy


Gi r = A[i] mod k
Vi i = 1:
F(1, v) = 0 nu r <> v
F(1, v) = 1 nu r = v
Vi i > 1 :
Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 }
Nu v > r v F(i-1, v- r) >0 th
F(i, v) = Max {F(i-1, v), F(i-1, v r) +1 }
Nu v < r v F(i-1, v r + k)>0 th
F(i, v) = Max{F(i-1, v), F(i-1, v r + k) + 1}
28

14

Tinh ch Cng thc quy


Gi r = A[i] mod k
Vi i = 1:
F(1, v) = 0 nu r <> v
F(1, v) = 1 nu r = v
Vi i > 1 :
Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 }
Nu v<>r v F(i-1, (v-r+k) mod k) > 0 th
F(i, v) = Max {F(i-1, v), F(i-1, (v r + k) mod k) +1 }

29

Xy dng bng phng n:


Cu trc bng phng n:
Dng mng F[1..n][0..K-1] cha gi tr ca cc F(i, v)
Cch tnh gi tr trn bng phng n:
in gi tr dng 1: Nu A[1] mod k = v th F[1, v] = 1 ngc li F[1, v] = 0
S dng cng thc quy v gi tr trn dng i -1 tnh dng i

30

15

V d bng phng n:
Vi i > 1 :
Nu v = r th : F(i, v) = Max {F(i-1, v), F(i-1, 0) +1 }
Nu v<>r v F(i-1, (v-r+k) mod k) > 0 th
F(i, v) = Max {F(i-1, v), F(i-1, (v r + k) mod k) +1 }
i

r=A[i]

4 | 0

0 | 1

1 | 2

2 | 0

3 | 0

3 | 0

4 | 1

0 | 2

1 | 2

2 | 3

3 | 3

4 | 3

0 | 2

1 | 2

2 | 3

0 | 4

1 | 4

2 | 3

3 | 3

4 | 4

2 | 4

3 | 4

4 | 5

1 | 5

2 | 6

31

Thut ton to bng phng n


void TaoBangPhuongAn(F[1..n][0..k-1])
{
for (v=0; v <= k-1; v++) F[1, v] = (A[i]%k == v) ? 1 : 0;
for (i = 2; i <= n; i++)
for (v=0; v <= k-1; v++)
{

r = A[i] % k;
F[i, v] = F[i-1, v];
If (v == r && F[i, v] <= F[i-1, 0 ])
F[i, v] = F[i-1, 0] + 1;
else if (F[i-1, (v - r + k)%k] >0 && F[i, v] <= F[i-1, (v - r + k)%k])
F[i, v] = F[ i -1, (v - r + k)%k] + 1;

}
}
32

16

Truy vt
Bt u t F[n, 0] trn dng n ta d ngc v dng 0 theo nguyn tc:
Nu F[i1, (v-r+k)%k] > 0 v F[i, v] > F[i1, (v-r+k)%k]:
A[i] c chn
Truy tip F[i -1, (v-r+k)%k].
Ngc li th A[i] khng c chn, ta truy tip F[i -1, v].
i

r=A[i]

4 | 0

0 | 1

1 | 2

2 | 0

3 | 0

3 | 0

4 | 1

0 | 2

1 | 2

2 | 3

3 | 3

4 | 3

0 | 2

1 | 2

2 | 3

0 | 4

1 | 4

2 | 3

3 | 3

4 | 4

2 | 4

3 | 4

4 | 5

1 | 5

2 | 6

33

Tm dy con khng gim di nht


Cho mt dy gm n s nguyn. Hy loi b khi dy mt s phn
t c mt dy con khng gim di nht. In ra dy con .
V d: vi n = 10 v dy A c cho trong bng.
Hy ch ra dy con khng gim di nht ?

10

Dy A

-7

-3

15

34

17

Xc nh tham s th hin kch thc bi ton


Gi L(n) l di dy con khng gim di nht trong min [1..n]
L(n) = L(n-1) nu dy con di nht trong min [1..n-1] khng
c A[n]
L(n) = L(n-1) +1 nu dy con di nht trong min [1..n-1] c
A[n]
Do tham s th hin kch thc bi ton l s phn t n.
Xt 2 cch ghi nhn kt qu cc bi ton con:
I

10

Dy A

-7

-3

15

Cch 1

Cch 2

35

Lp cng thc qui


Gi L(i) l di dy con di nht trong dy A[1..i] v c A[i] l
phn t cui dy con di nht .
Nu A[i] < A[j] vi mi j < i th: L(i) = 1
Ngc li th : L(i) = Max{ L(j) : j < i v A[j] <= A[i] } + 1
Bi ton nh nht vi on A[1..1] th L(1) = 1

10

Dy A[i]

L(i)

-7

-3

15

36

18

Xy dng bng phng n:


Mng L[1..n]: L[i] cha gi tr ca L(i)
Mng Truoc[1..n]: Truoc[i] ghi ch s phn t k trc i trong dy con di
nht m i l phn t cui dy.
Cch tnh gi tr trn bng phng n:
Gn L[1] = 1 v Truoc[1] = 0
Vi cc phn t i t 2 n n:
Nu A[i] < A[j] vi mi j < i th: L(i) = 1 v Truoc(i) = 0
Ngc li th
L(i) = Max{ L(j) : j < i v A[j] <= A[i] } + 1
Truoc[i] = k sao cho L(k)= Max{ L(j) : j < i v A[j] <= A[i] }
I

10

Dy A[i]

B[i]

-7

-3

15

Truoc[i]

37

Thut ton to bng phng n


void TaoBangPhuongAn()
{
I
1
L[1] = 1;
Truoc[1] = 0;
A[i]
2
for (i = 2; i <= n; i++)
L[i]
1
{
L[i] = 1;
Truoc[i] 0
Truoc[i] = 0;
for (j = i-1; j >= 1; j--)
if (A[j] <= A[i] && L[j] >= L[i])
{
L[i] = L[j] + 1;
Truoc[i] = j;
}
}
}

10

-7

-3

15

38

19

Truy vt tm li cc phn t trn dy con


Bt u t phn t i c gi tr L[i] c ln nht l phn t cui cng trong dy
con di nht.
Truy tip sang phn t c ch s Trc[i] cho n khi phn t Truoc[i] = 0.
I

Dy A[i]
L[i]
Truoc[i]

10

-7

-3

15

39

Thut ton truy vt


tm li cc phn t trn dy con ti u
void TruyVet()
{
i = n;
for ( j = n-1; j >=1; j--)

A[i]

-7

B[i]

Truoc[i]

10

-3

15

if (B[j] > B[i]) i = j;


while ( i > 0)
{
<in thng tin A[i] thuc dy con ti u>;
i = Truoc[i];
}
<in thng tin A[i] thuc dy con ti u>;
}

40

20

Lp lch thu nhn cng


C mt d n ko di trong T thng, ngi qun l cn phi lp
lch s dng cng nhn mi thng cho d n. Bit rng, s cng
nhn ti thiu cn trong thng th i l Scn[i]; tin dch v khi thu 1
cng nhn mi l DV; tin n b khi sa thi mt cng nhn l ST;
lng thng mi cng nhn phi tr l LT.
Cn phi thu hay sa thi bao nhiu cng nhn mi thng tng
chi ph nhn cng ca d n l nh nht.
Gi thit
T=3
DV=4; ST= 5; LT=6
Scn={11; 9; 10}

Kt lun
265
11 10 10

41

Xc nh tham s th hin kch thc bi ton


Tham s th hin kch thc bi ton l s thng T
Tng chi ph nhn cng trong T thng c tnh t tng chi ph
nhn cng ca T-1 thng cng thm chi ph tr nhn cng ca
thng th T.
Chi ph tr nhn cng ca thng th T bao gm :
Tin lng tr cho s nhn cng ca thng T v
Tin dch v nu s nhn cng ca thng T ln hn s nhn
cng thng T-1 hay tin sa thi nu s nhn cng trong thng
T nh hn s nhn cng ca thng T-1.
Kch thc bi ton ph thuc vo 2 tham s: s thng v s
nhn cng ca thng
42

21

Lp cng thc qui


Scn[i] lu s cng nhn cn thu cho thng th i
Smax l s cng nhn ca thng cn nhiu ngi nht
Bi ton con nh nht ng vi i = 1 (thng u tin):
C(1, j) = j * (DV + LT)

vi j = Scn[1]..Smax

C(i, j) l chi ph ti thiu ca i thng u tin nu ti thng th i


c j cng nhn c thu.
C(i, j) = Min{ C(i-1, k) + chi ph t k ngi thnh j ngi }
( i=2..T;

j =Scn[i]..Smax;

k = Scn[i-1]..Smax)

Kt qu bi ton l: Kq = Min{C(T, j) + chi ph sa thi j ngi}


j=Scn[T]..Smax
43

Xy dng bng cha C(i, j)


Mng C[1..T+1, 1..Smax]: C[i, j] ghi nhn gi tr C(i, j)
C(1, j) = j * (DV + LT)

vi j = Scn[1]..Smax

C(i, j) = Min{ C(i-1, k) + chi ph t k ngi thnh j ngi }


( i=1..T;

j =Scn[i]..Smax;

C(T+1, j) = C(T, j) + (j * ST)


Scn i \ j
11

10

k = Scn[i-1]..Smax)

j=Scn[T]..Smax

10

11
99

99+45+12=156

99+50+6=155

99+55=164

155+50=205

155+55+4=214

205+60=265

2144+66=280

44

22

Xy dng bng truy vt s cng nhn


Mng Truoc[1..T, 1..Smax]: Truoc[i, j] := k l s ngi thu
thng th i-1 c C[i, j]
Scn i \ j
11

10

10

11
99

99+45+12=156

99+50+6=155

99+55=164

155+50=205

155+55+4=214

205+60=265

2144+66=280

Scn i \ j
11

10

10

11

11

11

11

10

10

45

Thut ton to bng phng n C v Truoc


{ for (j=Scn[1]; j <= Smax; j++) C[1, j] = j * (DV + LT);
for (i = 2; i <= T; i++)
for (j=Scn[i]; j <= Smax; j++)
{

C[i, j] = MAXINT;
for (k=Scn[i-1]; k <= Smax; k++)
{

X = C[i-1, k] ;
if (k > j) X = X + (k j)*DV; else X = X + (j k)*ST
if (X< C[i, j]) { C[i, j] = X; Truoc[i, j] = k; }

}
}
for (j=Scn[T]; j <= Smax; j++) C[T+1, j] = C(T, j) + (j * ST) ;
}
46

23

Thut ton truy vt s cng nhn mi thng


{

//Tm s nhn cng ca thng th T


S = C[T+1, Scn[T] ];

k = Scn[T];

for (j=Scn[T]+1; j <= Smax; j++)


if (S > C[T+1, j ]) { k = j; S =C[T+1, j ]; }
<Thng T cn k cng nhn>
for (i=T; i > 1; i--)
{

k = Truoc[i, k];
<Thng i-1 cn k cng nhn>

}
}
47

Bi tp
1.
2.

3.

4.

5.

C N gi ko, gi th i c Ai ci ko. Khng c bc bt k mt gi ko no, cn


chia N gi ko thnh hai phn sao cho chnh lch s ko gia hai gi l t nht.
Cho n loi t giy bc. T giy bc th i c mnh gi A[i]. S t mi loi khng gii
hn. Cn chi tr cho khch hng s tin M ng. Hy cho bit mi loi tin cn bao
nhiu t sao cho tng s t l t nht. Nu khng i c, th thng bo KHONG
DOI DUOC.
Cho n loi t giy bc. T giy bc th i c mnh gi A[i]. Gi thit loi tin mnh gi
A[i] c B[i] t (i := 1, n). Cn chi tr cho khch hng s tin M ng. Hy cho bit mi
loi tin cn bao nhiu t sao cho tng s t l t nht. Nu khng i c, th
thng bo KHONG DOI DUOC.
Cn cm k loi hoa khc nhau vo n l xp thng hng sao cho loi hoa c s hiu
nh c t trc hoa c s hiu ln. Vi mi loi hoa i ta bit gi tr thm m khi
cm hoa vo l j l v[i,j]. Hy tm phng n cm cc loi hoa trn vo n l sao
cho tng gi tr thm m l ln nht.
Mt hp th in t cho php gi nh km mt hoc nhiu file vo mt th in t
sao cho tng dung lng cc file nh km trn th in t khng vt qu kch
thc M KByte cho trc. c s th in t gi i l t nht, ngi ta cn chn
trong N file d liu cc file nh km vo mt email sao cho tng dung lng ca
cc file nh km l ln nht nhng khng vt qu kch thc M. Gi s, M 100;
N 50 v file th i trong N file d liu c kch thc l Ai KByte (l s nguyn
dng). Hy trnh by thut ton chn trong N file d liu cc file nh km vo
mt th in t theo yu cu trn, lit k kch thc cc file chn.
48

24

6.

Vic xy dng cng trnh cp nc sch cc bn vng cao rt kh khn, phi xy


dng ko h thng dn nc t di thung lng ln bn bng qua cc ngn i.
thun li cho vic dn nc, ngi ta t cc trm bm ni tip trn tng ngn i
dn t thung lng ln bn vng cao, theo nguyn tc ngn i sau phi cao hn
ngn i trc, hai trm bm k nhau khng nht thit t trn hai ngn i k nhau.
Gi s c N ngn i (N 100), mi ngn i c gn mt s th t tng theo
hng t thung lng ln vng cao, ngn i th i c cao Ai (l mt s nguyn
dng).
1. Hy trnh by gii thut chn la ra cc ngn i t cc trm bm sao cho s
ngn i c chn l nhiu nht.
2. S dng Pascal, C/C++, hoc Java ci t gii thut trn.

7.

Mt cng ty my tnh nhn c N hp ng (N 50) lp t h thng my tnh ti N


cng ty. Hp ng th i c gi tr l Ci (s nguyn) v cn Ai nhn s thc hin.
Do s lng nhn s ca cng ty c hn, nn Cng ty mun u tin chn mt s
hp ng thc hin trc sao cho tng gi tr ca cc hp ng chn l ln
nht nhng tng s nhn s thc hin cc hp ng khng vt qu s lng M
nhn s (M 100) hin c ca cng ty. Hy trnh by thut gii chn la cc hp
ng theo yu cu trn, cho bit tng gi tr ca cc hp ng chn; gi tr hp
ng v s lng nhn s ca cc hp ng chn.
49

6. Mt cng ty my tnh nhn c N hp ng (N 50) lp t h thng my tnh ti N


cng ty. Hp ng th i c gi tr l Ci (s nguyn) v cn Ai nhn s thc hin.
Do s lng nhn s ca cng ty c hn, nn Cng ty mun u tin chn mt s
hp ng thc hin trc sao cho tng gi tr ca cc hp ng chn l ln
nht nhng tng s nhn s thc hin cc hp ng khng vt qu s lng M
nhn s (M 100) hin c ca cng ty. Hy trnh by thut gii chn la cc hp
ng theo yu cu trn, cho bit tng gi tr ca cc hp ng chn; gi tr hp
ng v s lng nhn s ca cc hp ng chn.

50

25

You might also like