雷曼兔(csapc)


这里算不上dp吧.直接输入设置就能行了.


P1474雷曼兔(csapc)
未递交

描述

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

格式

输入格式

第一行包括一个整数n(n<=50)表示地图的长宽。

接下来n行每行包括n个数表示每个地点的高度。

输出格式

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

样例1

样例输入1[复制]

2
3 2 
1 4

样例输出1[复制]

9
#include <iostream>
#include<cmath>
using namespace std;
int i,j,n,it,mb,temp;
int x[2800],y[2800],num[2800];
void init()
{
    cin >> n;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            cin >> it;
            x[it]=i;//这里太明智了,直接第几个就设置成第几个
            y[it]=j;
        }
}
int main()
{
    init();//对座标进行设置。num[n*n]=0;
    for(i=n*n-1;i>=1;i--)
    {
        mb=0;
        for(j=i+1;j<=n*n;j++)
        {
            temp=num[j]+( abs(x[j]-x[i])+abs(y[j]-y[i]) )*( abs(x[j]-x[i])+abs(y[j]-y[i]) );
            if(temp>mb) mb=temp;
            //cout<<num[j]<<" ";
        }
        num[i]=mb;
    }
    cout << num[1] << endl;
    return 0;
}



https://vijos.org/p/1474






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章