BK Algorithm Club
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.


BK Algorithm Practice Forum
 
Trang ChínhTrang Chính  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

 

 giup doBARIC

Go down 
2 posters
Tác giảThông điệp
ktuan
dzô THCS
dzô THCS



Tổng số bài gửi : 30
Join date : 02/01/2009

giup doBARIC Empty
Bài gửiTiêu đề: giup doBARIC   giup doBARIC I_icon_minitime17.01.09 20:29

const
fi='';
fo='';
nmax=101;
var f:text;
n,e,sl,tl: longint;
tg,kq,gt:array[0..nmax,0..nmax] of longint;
dau,cuoi: array[0..nmax] of longint;
m:array[0..nmax] of longint;

procedure input;
var i: longint;
begin
assign(f,fi);
reset(f);
readln(f,n,e);
for i:=1 to n do
readln(f,m[i]);
close(f);
end;

procedure tinh(i,j: longint; var tong: longint);
var tg1,k: longint;
begin
tg1:=m[i]+m[j] ;
for k:=i+1 to j-1 do
begin
tong:= tong+abs(tg1-2*m[k]);
if tong>e then
begin
tong:=e+1;
exit;
end;
end;
end;

procedure init;
var i,j,k: longint;
begin
fillchar(tg,sizeof(tg),0);
for i:=1 to n-2 do
for j:=i+2 to n do
tinh(i,j,tg[i,j]);
fillchar(dau,sizeof(dau),0);
fillchar(cuoi,sizeof(cuoi),0);
for i:=2 to n do
for j:=1 to i-1 do
begin
dau[i]:=dau[i]+ 2*abs(m[i]-m[j]);
if dau[i]>e then
begin
dau[i]:=e+1;
break;
end;
end;
for i:=n-1 downto 1 do
for j:=n downto i+1 do
begin
cuoi[i]:=cuoi[i]+2*abs(m[i]-m[j]);
if cuoi[i]>e then
begin
cuoi[i]:=e+1;
break;
end;
end;
end;

function min(x,y: longint): longint;
begin
min:=x;
if min>y then min:=y;
end;

procedure qhd;
var i,j,k: longint;
begin
sl:=0;
for i:=1 to n do
gt[1,i]:=dau[i];
for i:=1 to n do
if dau[i]+cuoi[i]<=e then
begin
sl:=1;
tl:=dau[i]+cuoi[i];
exit;
end;
{....................}
for i:=2 to n do
begin
gt[i,i]:=0;
for j:=i+1 to n do
begin
gt[i,j]:=e+1;
for k:=j-1 downto i-1 do
gt[i,j]:= min(gt[i,j],gt[i-1,k]+tg[k,j]);
end;
for j:=i to n do
if gt[i,j]+cuoi[j]<=e then
begin
sl:=i;
tl:=gt[i,j]+cuoi[j];
exit;
end;
end;
end;

procedure output;
begin
assign(f,fo);
rewrite(f);
writeln(f,sl,' ',tl);
close(f);
end;

begin
input;
init;
qhd;
output;
end.
http://vn.spoj.pl/problems/BARIC/
Nho xem ho xem bai nay sao chi duoc co 70/100 lol! lol! lol!
Về Đầu Trang Go down
NKK
bắt đầu sự nghiệp đi học
bắt đầu sự nghiệp đi học



Tổng số bài gửi : 13
Join date : 28/12/2008

giup doBARIC Empty
Bài gửiTiêu đề: Re: giup doBARIC   giup doBARIC I_icon_minitime17.01.09 22:27

Bài này làm dài thế.
var
f,z: array [0..110,0..110] of longint;
a: array [0..110] of longint;
i,j,k,n,e: longint;
begin
read(n,e);
for i:=1 to n do read(a[i]);
for i:=1 to n+1 do
for j:=i-1 downto 0 do
begin
z[i,j]:=0;
if (i = n+1) and (j = 0) then z[i,j]:=e+1 else
for k:=j+1 to i-1 do
if i > n then inc(z[i,j],2*abs(a[k]-a[j])) else
if j < 1 then inc(z[i,j],2*abs(a[k]-a[i]))
else inc(z[i,j],abs(2*a[k]-a[i]-a[j]));
end;
for i:=0 to n+1 do
for j:=0 to n+1 do f[i,j]:=e+1;
f[0,0]:=0;
for i:=1 to n+1 do
for j:=1 to n+1 do
for k:=i-1 downto 0 do
if f[k,j-1]+z[i,k] < f[i,j] then
f[i,j]:=f[k,j-1]+z[i,k];
for k:=n+1 downto 0 do
if f[n+1,k] > e then
begin
writeln(k,' ',f[n+1,k+1]);
break;
end;
end.

Tư tưởng là QHD O(n^3) cộng tính toán trước. Bài ktuan cũng QHĐ vậy mà chỉ được 70, hơi lạ.


Về Đầu Trang Go down
ktuan
dzô THCS
dzô THCS



Tổng số bài gửi : 30
Join date : 02/01/2009

giup doBARIC Empty
Bài gửiTiêu đề: Re: giup doBARIC   giup doBARIC I_icon_minitime17.01.09 23:20

chao anh Nguyen Quang Anh cha cha kinh khung kinh khung
cyclops cyclops cyclops
Về Đầu Trang Go down
Sponsored content





giup doBARIC Empty
Bài gửiTiêu đề: Re: giup doBARIC   giup doBARIC I_icon_minitime

Về Đầu Trang Go down
 
giup doBARIC
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
BK Algorithm Club :: Giải bài trực tuyến :: SPOJ-
Chuyển đến