加分二叉树(NOIP2003)

deadrain 发表于 2007-08-14 23:28:43

用数组a[i,j]记录从第i个数到第j个数的最大加分,b[i,j]记录这个最大加分的根节点标号。
叶结点的加分即为a[i,i],根节点标号即为b[i,i]=i。
最后再搜索一下,a[1,n]即为解。

CODE:
----------------------------------------------------

program p1100;
var
 n,i:integer;
 a:array[1..30,1..30] of longint;
 b:array[1..30,1..30] of integer;

procedure try(l,r:integer);
var
 i,value:longint;
begin
 if l>r then a[l,r]:=1;
 for i:=l to r do
 begin
  if a[l,i-1]=0 then try(l,i-1);
  if a[i+1,r]=0 then try(i+1,r);
  value:=a[l,i-1]*a[i+1,r]+a[i,i];
  if value>a[l,r] then
  begin
   a[l,r]:=value;
   b[l,r]:=i;
  end;
 end;
end;

procedure print(l,r:longint);
begin
 if l>r then exit;
 write(b[l,r],' ');
 print(l,b[l,r]-1);
 print(b[l,r]+1,r);
end;

begin
 readln(n);
 for i:=1 to n do
 begin
  read(a[i,i]);
  b[i,i]:=i;
 end;

 try(1,n);
 writeln(a[1,n]);
 print(1,n);
 writeln;
end.

关键词(Tag): noip vijos


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论


  • !!!!
    2007-11-13 19:30:55 匿名 218.6.*.*


  • 江南不才
    2007-11-13 19:31:38 匿名 218.6.*.*

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定