PDA

View Full Version : tuyển người giải không spam!



bipbipbip
02-08-2011, 21:15
Cho trước mảng nguyên a, tìm cách chia thành 2 nửa tổng bằng nhau.
Cho trước mảng nguyên a, tìm cách chia thành 2 nửa sao cho tổng đoạn này bằng k lần đoạn kia.
HELP! THANKS nha pro!

Link: http://www.ddth.com/member.php/863009-farmer_boy.html#ixzz1TsgJX27O

haplinhavxt
02-08-2011, 21:18
Tuyển người có tiền công không bạn?
Bạn phải nó rõ đề ra chứ, để còn biết cách giải! Nếu n nhỏ thì thử quay lui cho oách, nếu n lớn thì QHĐ thôi!

bipbipbip
02-08-2011, 21:25
thì cứ giải kiểu n tầm 5 10 thôi! thầy ổng thử cỡ đó chứ không nhiều đâu!

bipbipbip
02-08-2011, 22:14
up!!!!!!!!! help! Gấp gấp

xuperman
02-08-2011, 22:26
Bài này chắc ý bạn là các phần tử không cần liên tục trên đoạn phải không?
Bạn lấy tổng hết chia đôi ra s rồi sử dụng quy hoạch động tính tổng từ 1 đến s.

bài 2 khó quá nhỉ

bipbipbip
03-08-2011, 07:44
:) chào thua! Close thread :)

Farmer_Boy
03-08-2011, 11:02
bài 1 là 1 trg` hợp của bài 2 là k=1 thôi, nếu muốn chia ra thì tổng các số trong mảng phải chia hết cho k+1 mới dc sau đó dùng QHĐ (mặc dù mình chưa rành lắm)

HGMinh95
03-08-2011, 21:45
Cả 2 bài này cũng như nhau cả thôi.
Đề bài của 2 bài có thể chuyển thành: Cho mảng nguyên a, tìm dãy con có tổng là S/(k+1) với S là tổng của mảng a.

Như vậy dùng QHĐ là ra thôi.

ThangA3
04-08-2011, 05:59
các bác chả ai post đoạn code nào cả, toàn nói miệng ko ah`

ThangA3
06-08-2011, 14:45
ặc ặc em nói thế rùi mà chẳng có bác nào hảo tâm post code lên ak,.....

HGMinh95
07-08-2011, 11:26
Code bài này cũng giống bài phân tích n thành tổng các số cp thôi.

Farmer_Boy
08-08-2011, 19:12
Hay là làm theo cách này nhỉ, tổng các số chia hết cho k+1 sau đó dùng bài toán dãy con có tổng bằng S để giải

ThangA3
08-08-2011, 21:54
CODE bài 2, có gì sai thỳ thứ lỗi nhé

program chia_mang;
var a: array[1..200] of integer;
b: array[0..10000,1..2] of integer;
bo: array[1..10000] of boolean;
max,i,j,k,n: integer;
f: text;
{=====================}
procedure docf;
begin
assign(f,'vao.inp');
reset(f);
readln(f,n,k);
for i:=1 to n do read(f,a[i]);
close(f);
end;
{======================}
procedure vietf;
begin
fillchar(bo,sizeof(bo),false);
assign(f,'ra.out');
rewrite(f);
i:= max div k;
j:= max - i;
writeln(f,'tong day ',max);
writeln(f,'tong tung mang con ',i,' va ',j);
write(f,'gia tri mang 1: ');
while i>0 do
begin
write(f,a[b[i,2]],' ');
bo[b[i,2]]:= true;
i:= i - a[b[i,2]];
end;
writeln(f); write(f,'gia tri mang 2: ');
for j:= 1 to n do
if bo[j]= false then
write(f,a[j],' ');
close(f);
end;
{======================}
procedure quy_hoach_dong;
begin
max:=0;
b[0,1]:=1;
b[0,2]:=0;
for i:=1 to n do
begin
for j:= max downto 0 do
if b[j,1]=1 then
if b[j+a[i],1]=0 then
begin
b[j+a[i],1]:=1;
b[j+a[i],2]:=i;
end;
max:= max + a[i];
end;
k:= k+1;
if max mod k=0 then
if b[max div k,1]=1 then
vietf;
end;
{===========================}
begin
docf;
quy_hoach_dong;
end.
bài này em làm giới hạn là 0<n<= 200; a[i]<= 500
vao.inp
10 1
1 2 3 4 5 6 7 8 9 11
ra.out
tong mang 58
tong tung mang 28 va 28
mang1: 7 6 5 4 3 2 1
mang2: 11 9 8

ThangA3
08-08-2011, 22:07
coment cái cỗ vũ tinh thần nào.......:D

auauau97
09-08-2011, 10:36
coment cái cỗ vũ tinh thần nào.......:D
Cổ vũ thì ấn like là xong, đâu cần phải cm hả bạn ?