VJ 1474 雷曼兔

描述

这次,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

提示

最优路径为4->3->2->1,得分为4+1+4=9。

DP.但是有个疑问就是n<50, 但是数组开(50 + 10)^2会RE,但是开到3000就不会。。什么情况

CODE:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 50 + 10

using namespace std;

int n, map[3000][2];
int F[3000];

int main(){
    int tmp = 0;
    scanf("%d", &n);
    REP(i, 1, n) REP(j, 1, n){
        scanf("%d", &tmp);
        map[tmp][1] = i; map[tmp][2] = j;
    }

    memset(F, 0, sizeof(F));
    REP_(i, 2, n * n) REP_(j, 1, i - 1){
        int ans = abs(map[i][1] - map[j][1]) + abs(map[i][2] - map[j][2]);
        ans *= ans;
        if(F[i] + ans > F[j]) F[j] = F[i] + ans;
    }

    int ans = 0;
    REP(i, 1, n) if(F[i] > ans) ans = F[i];
    printf("%d\n", ans);
    return 0;
}
时间: 2024-10-14 00:30:19

VJ 1474 雷曼兔的相关文章

vijos1474:雷曼兔

P1474雷曼兔(csapc) Accepted 标签:csapc[显示标签] 描述 这次,OI山成为了雷曼兔那无尽的冒险传说的新舞台!传说OI山中埋藏着巨大的宝藏,伴随着这个传说的是一个迷题:最瑰丽的舞者将达至精灵世界的彼岸……经过仔细推敲,雷曼兔发现这是一个提示宝藏埋藏位置的谜语,在该谜语中指出了一个特定的路径,只有经过了该路径宝藏才会出现,具体情况如下:OI山的地势图可以看作一个N*N的数字矩阵,由1-N^2的数字组成(每个数字出现且仅出现一次),这些数字表示每个地点的地势高低.雷曼兔的出

实现斐波那契神兔

1.用循环实现不死神兔 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契. 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔, 再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡, 问:一对刚出生的兔子,一年内繁殖成多少对兔子? 1 1 2 3 5 8 13 21 1 import java.util.Arrays; 2 3 public class Tu { 4 5 public static void main(String

酷雷曼360全景:制作高质量的360全景需要注意哪些

酷雷曼360全景隶属于同创蓝天投资管理(北京)有限公司,我们是一家专注与360度全景拍摄和制作的公司,是国内专业的以全景技术为核心的数字营销解决方案提供商. 我们的主要业务有:全景拍摄,360度全景制作,720度全景制作,三维全景制作,全景网站,景区全景.酒店全景.虚拟展厅.房产全景.数字博物馆全景.政府全景.企业全景.学校全景.虚拟漫游,并面向全国寻求合作伙伴,招商合作,为广大创业者提供优质的创业平台. 在拍摄360全景照片之前期有良好的规划,事先对场地.环境有一个初步的估算,拍摄过程中会顺利

C/C++算法竞赛入门经典Page9 例题1-4 鸡兔同笼

题目:鸡和兔总数:n,总腿数:m.输入n,m,输出鸡和兔分别的数量;无解则输出"No answer" 样例输出1: 14 32 样例输出1: 12 2 样例输入2: 10 16 样例输出2: No answer 首先,声明两个变量n,m对应总数和总腿数;再声明两个变量为鸡和兔各自的数量a,b 1 int n,m,a,b; 输入n,m: scanf("%d%d",&n,&m); 通过联立方程组: a+b=n 2a+4b=m 得: a=(4n-m)/2;

已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只

描述    已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只, 如果无法组成    输入    h(0<h<2147483647)    f(0<f<2147483647)    输出    鸡的数目    兔子的数目 public class Main {     public static void main(String[] args){         int h = 0;         int f = 0;         Scanner scanner = new S

一对幼兔一个月长成小兔,再过一月长成成兔并生下幼兔,问24个月之后有多少对兔子,成兔每个月都会生下一对幼兔

int a=1,b=0,c=0,sum = 0;//a 幼兔对数,b 小兔对数,c 成兔对数,sum 总对数 for (int i = 1; i <=24; i++) { if (i == 1) { a = 1; b = 0; c = 0; } else { c = b + c; b = a; a = c; } sum = a + b + c; Console.WriteLine(i+"个月后,一共有兔子" + sum + "对,其中幼兔" + a + &qu

鸡兔同笼

鸡兔同笼 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡和兔的数目,如果无解,则输出"No answer"(不要引号). 输入 第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10) a行里,每行都有一个n和m.(0<m,n<100) 输出 输出鸡兔的个数,或者No answer 样例输入 2 14 32 10 16 样例输出 12 2 No answer #inc

java求鸡兔同笼问题

import java.util.Scanner; public class jitutonglong { static int j,t; public static int qiongju(int head,int foot) { int re,x,y; re=0; for(x=0;x<=head;x++) { y=head-x; if(x*2+y*4==foot) { re=1; j=x; t=y; } } return re; } public static void main(Strin

不死神兔

Python:'''不死神兔: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?'''a, b = 0, 1for i in range(1, 21): print('第%s个月:%s只兔子' % (i,b)) a, b = b, a+b java: public class Day06 { public static void main(String[] args) { // TODO Auto-generat