SSL 1748_飞翔_dp+离散

来源:互联网 发布:模拟投资基金软件 编辑:程序博客网 时间:2024/06/05 02:15

题目描述

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


思路

离散了以后用最长不下降子序列求解
就是排序一下找到一个有最多特殊路径的上升的路就可以了


#include <stdio.h>#include <algorithm>#include <math.h>using namespace std;struct arr{    int x,y;}a[10000];int f[10000];int camp(arr a,arr b){    if (a.x==b.x)          return a.y<b.y;      return a.x<b.x; }int main(){    int n,m,l;    scanf("%d%d%d",&n,&m,&l);    for (int i=1;i<=l;i++)        scanf("%d%d",&a[i].x,&a[i].y);    sort(a+1,a+l+1,camp);    for (int i=1;i<=l;i++)    {        int t=0;        for (int j=0;j<=i;j++)        {            if (a[j].x<a[i].x&&a[j].y<a[i].y&&f[j]+1>t)                t=f[j]+1;        }        f[i]=t;    }    int t=0;    for (int i=1;i<=l;i++)        if (f[i]>t) t=f[i];    printf("%.0lf\n",(n+m-2*t+sqrt(2)*t)*100);}
1 0
原创粉丝点击