• 飞翔


    题目描述

    鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧。于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中。

    这些鹰的起始点被设在一个N*M矩阵的左下角map[1,1]的左下角。终点被设定在矩阵的右上角map[N,M]的右上角,有些map[i,j]是可以从中间穿越的。每一个方格的边长都是100米。如图所示:

    没有障碍,也没有死路。这样设计主要是为了高速飞行的鹰们不要发现死路来不及调整而发生意外。

    潘帕斯雄鹰冒着减RP的危险从比赛承办方戒备森严的基地中偷 来了施工的地图。但是问题也随之而来,他必须在比赛开始之前把地图的每一条路都搞清楚,从中找到一条到达终点最近的路。(哈哈,笨鸟不先飞也要拿冠军)但 是此鹰是前无古鹰,后无来鹰的吃菜长大的鹰--菜鸟。他自己没有办法得出最短的路径,于是紧急之下找到了学OI的你,希望找到你的帮助。

    输入格式

    首行为n,m(0<n,m<=1000000),第2行为k(0<k<=1000)表示有多少个特殊的边。以下k行为两个数,i,j表示map[i,j]是可以直接穿越的。

    输出格式

    仅一行,(1,1)-->(n,m)的最短路径的长度,四舍五入保留到整数即可

    样例

    样例输入

    3 2
    3
    1 1
    3 2
    1 2
    

    样例输出

    383
    

    code

    #include <bits/stdc++.h>
    using namespace std;
    #define cle(a) memset(a,0,sizeof(a))
    //#define int long long
    const int maxn=1500;
    const int Inf=0x3f3f3f3f;
    int dp[maxn];
    int sum;
    struct node{int x,y;}a[maxn];
    bool cmp(node a,node b){
    	return a.x<b.x;
    }
    int main(){
    	int n,m,k;cin>>n>>m>>k;
    	for(int i=1;i<=k;i++)
    		cin>>a[i].x>>a[i].y;
    	sort(a+1,a+k+1,cmp);
    	for(int i=1;i<=k;i++)
    		for(int j=i+1;j<=k;j++)
    			if(a[j].x>a[i].x && a[j].y>a[i].y && dp[i]+1>dp[j])
    				dp[j]=dp[i]+1;
    	for(int i=1;i<=k;i++)
    		sum=max(dp[i],sum);
    	sum++;
    	double len=2-sqrt(2),ans=(m+n-sum*len)*100;
    	cout<<int (ans+0.5);
    	return 0;
    }
    
  • 相关阅读:
    JS 继承
    Ajax 与 Comet
    JS事件对象
    JS事件处理程序
    在JavaScript中创建命名空间的几种写法
    DOM0 DOM2 DOM3
    html5脚本编程
    canvas画图
    R语言平均值和加权平均值
    pyqt5通过文本对话框打开文件
  • 原文地址:https://www.cnblogs.com/hellohhy/p/13198656.html
Copyright © 2020-2023  润新知