讨论 / 求助
刘彦彬 2013-08-31 08:22:00
点我顶贴 收藏 删除
能量项链,为什么只有50分啊

program jkl;

var

n,i,j,k,max:longint;

a,b:array[0..1000] of longint;

f:array[0..100,0..100] of longint;

begin

readln(n);

for i:=1 to n do

begin

read(a[i]);

a[i+n]:=a[i];

end;

for i:=1 to 2*n-1 do

b[i]:=a[i+1]; b[2*n]:=a[1];

for i:=1 to n do

f[i,2]:=a[i]*b[i]*b[i+1];

for j:=3 to n do

for i:=1 to n do

begin

for k:=2 to j-2 do

if f[i,j]<f[i,k]+f[i+k,j-k]+a[i]*a[i+k]*b[i+j-1]

then f[i,j]:=f[i,k]+f[i+k,j-k]+a[i]*a[i+k]*b[i+j-1];

if f[i,j]<f[i+1,j-1]+a[i]*b[i]*b[i+j-1]

then f[i,j]:=f[i+1,j-1]+a[i]*b[i]*b[i+j-1];

if f[i,j]<f[i,j-1]+a[i]*a[i+j-1]*b[i+j-1]

then f[i,j]:=f[i,j-1]+a[i]*a[i+j-1]*b[i+j-1];

end;

for i:=1 to n do

if f[i,n]>max

then max:=f[i,n];

writeln(max);

end.

#1 Hlog@2011-08-01 02:50:00
回复 删除
300分都不吸引人哪

.

#2 灰天飞雁@2011-08-01 05:16:00
回复 删除
楼主你知道我可以把300分都给sf吗?

自己思考吧……

#3 ?号疯子(第四代)@2011-08-01 17:48:00
回复 删除
支持楼上
#4 天翼@飞翔@2011-08-06 20:37:00
回复 删除
支持

#5 阮鹏博@2011-08-06 20:38:00
回复 删除
program rpb;

var

n,i,j,t,k,max:longint;

d:array[1..400]of longint;

f:array[0..400,0..400]of longint;

begin

readln(n);

for i:=1 to n do read(d[i]);

for i:=n+1 to n*2 do d[i]:=d[i-n];

for t:=2 to n do

for i:=1 to 2*n-t+1 do

begin

j:=i+t;

for k:=i+1 to j-1 do

if f[i,j]<f[i,k]+f[k,j]+d[i]*d[j]*d[k] then

f[i,j]:=f[i,k]+f[k,j]+d[i]*d[j]*d[k];

end;

max:=0;

for i:=1 to n do

if f[i,i+n]>max then max:=f[i,i+n];

writeln(max);

end.

#6 wuzw@2013-07-20 21:50:00
回复 删除
f鏁扮粍鏈惊鐜?

鏀规濡備笅

program jkl;

var

n,i,j,k,max:longint;

a,b:array[0..1000] of longint;

f:array[0..100,0..100] of longint;

function m(i:integer):integer;

begin

//if i>n then exit(i mod n)//////2n

//else exit(i);

while i>n do i:=i-n;

m:=i;

end;

begin

readln(n);

for i:=1 to n do

begin

read(a[i]);

a[i+n]:=a[i];

end;

for i:=1 to 2*n-1 do

b[i]:=a[i+1]; b[2*n]:=a[1];

for i:=1 to n do

f[i,2]:=a[i]*b[i]*b[i+1];

for j:=3 to n do

for i:=1 to n do

begin

for k:=2 to j-2 do

if f[i,j]<f[i,k]+f[m(i+k),j-k]+a[i]*a[i+k]*b[i+j-1]

then f[i,j]:=f[i,k]+f[m(i+k),j-k]+a[i]*a[i+k]*b[i+j-1];

if f[i,j]<f[m(i+1),j-1]+a[i]*b[i]*b[i+j-1]

then f[i,j]:=f[m(i+1),j-1]+a[i]*b[i]*b[i+j-1];

if f[i,j]<f[i,j-1]+a[i]*a[i+j-1]*b[i+j-1]

then f[i,j]:=f[i,j-1]+a[i]*a[i+j-1]*b[i+j-1];

end;

for i:=1 to n do

if f[i,n]>max

then max:=f[i,n];

writeln(max);

end.

#7 wuzw@2013-07-20 21:52:00
回复 删除
乱码了,第一行如下

f数组未循环,改正如下

#8 wuzw@2013-07-20 22:01:00
回复 删除
b[2*n]:=a[1];

这一句没用的,可去掉

#9 107229HR@2013-07-22 00:03:00
回复 删除
回复 板凳灰天飞雁 的帖子

支持。。。

#10 absi2011@2013-07-28 06:28:00
回复 删除
Support等级路过

RT,貌似我也能把300分全给sf....

查看更多回复
提交回复