【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 104857
  • 排名 - 233

最新评论

阅读排行榜

评论排行榜

这次,OI山成为了雷曼兔那无尽的冒险传说的新舞台!传说OI山中埋藏着巨大的宝藏,伴随着这个传说的是一个迷题:最瑰丽的舞者将达至精灵世界的彼岸……
经过仔细推敲,雷曼兔发现这是一个提示宝藏埋藏位置的谜语,在该谜语中指出了一个特定的路径,只有经过了该路径宝藏才会出现,具体情况如下:
OI山的地势图可以看作一个N*N的数字矩阵,由1-N^2的数字组成(每个数字出现且仅出现一次),这些数字表示每个地点的地势高低。雷曼兔的出发点在最高的山顶处,并且每次雷曼兔可以从其当前所在的位置跳跃到任何一个比当前地点高度低的位置,假设雷曼兔该次跳跃从坐标(x1,y1)跳到了坐标(x2,y2),则这次跳跃的华丽度定义为v=(|x1-x2|+|y1-y2|)^2。而开启宝藏秘密的路径就是从山顶不断跳跃直到山底(高度最低点)的华丽度总和最高的路径,而现在我们想要知道的是这个最高的华丽度总和是多少

input:
第一行包括一个整数n(n<=50)表示地图的长宽。
接下来n行每行包括n个数表示每个地点的高度。

output:
输出包括一个整数ans,表示从山顶到山底最高华丽度总和

input:
2
3 1
2 4

output:
9

【参考程序】:

type node=record
      x,y,s:longint;
     end;
var a:array[
1..2500]of node;
    f:array[
1..2500]of longint;
    n,i,j,k,max,sum:longint;
function jisuan(x1,y1,x2,y2:longint):longint;
begin
    jisuan:
=sqr(abs(x1-x2)+abs(y1-y2));
end;
procedure qsort(s,t:longint);
var i,j,mid:longint;
    tt:node;
begin
    i:
=s;j:=t;mid:=a[(s+t) div 2].s;
    
while i<=do
    begin
        
while a[i].s<mid do inc(i);
        
while a[j].s>mid do dec(j);
        
if i<=j then
        begin
            tt:
=a[i];a[i]:=a[j];a[j]:=tt;
            inc(i);dec(j);
        end;
    end;
    
if i<t then qsort(i,t);
    
if s<j then qsort(s,j);
end;
begin
    
//while not eof do
    
//begin
        read(n);
        k:
=0;
        
for i:=1 to n do
          
for j:=1 to n do
          begin
              inc(k);
              a[k].x:
=i;
              a[k].y:
=j;
              read(a[k].s);
          end;
        qsort(
1,k);
        fillchar(f,
sizeof(f),0);
        
for i:=k-1 downto 1 do
          
for j:=i+1 to k do
            
if a[i].s<a[j].s then
            begin
                sum:
=jisuan(a[i].x,a[i].y,a[j].x,a[j].y);
                
if f[i]<f[j]+sum then
                  f[i]:
=f[j]+sum;
            end;
        max:
=0;
        
for i:=1 to k do
          
if f[i]>max then
            max:
=f[i];
        writeln(max);
    
//end;
end.          
posted on 2009-03-29 08:46 开拓者 阅读(163) 评论(0)  编辑 收藏 引用 所属分类: 动态规划&背包

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理