• poj1661


    dp

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    #include
    <algorithm>
    using namespace std;

    #define maxn 1005

    struct Plat
    {
    int l, r, h, lt, rt;
    } plat[maxn];

    int n, m, cx, cy;

    bool operator <(const Plat &a, const Plat &b)
    {
    return a.h > b.h;
    }

    void input()
    {
    scanf(
    "%d%d%d%d", &n, &cx, &cy, &m);
    plat[
    0].l = plat[0].r = cx;
    plat[
    0].h = cy;
    for (int i = 1; i <= n; i++)
    {
    scanf(
    "%d%d%d", &plat[i].l, &plat[i].r, &plat[i].h);
    if (plat[i].l > plat[i].r)
    swap(plat[i].l, plat[i].r);
    }
    }

    void work()
    {
    int j;
    int ans = 0x3f3f3f3f;
    for (int i = 0; i <= n; i++)
    plat[i].lt
    = plat[i].rt = 0x3f3f3f3f;
    plat[
    0].lt = plat[0].rt = 0;
    for (int i = 0; i <= n; i++)
    {
    for (j = i + 1; j <= n; j++)
    {
    if (plat[i].h - plat[j].h > m)
    break;
    if (plat[i].h == plat[j].h)
    continue;
    if (plat[i].l <= plat[j].r && plat[i].l >= plat[j].l)
    {
    plat[j].lt
    = min(plat[i].h - plat[j].h + plat[i].lt + abs(
    plat[i].l
    - plat[j].l), plat[j].lt);
    plat[j].rt
    = min(plat[i].h - plat[j].h + plat[i].lt + abs(
    plat[i].l
    - plat[j].r), plat[j].rt);
    break;
    }
    }
    if (j > n && plat[i].h <= m)
    ans
    = min(ans, plat[i].lt + plat[i].h);
    for (j = i + 1; j <= n; j++)
    {
    if (plat[i].h - plat[j].h > m)
    break;
    if (plat[i].h == plat[j].h)
    continue;
    if (plat[i].r <= plat[j].r && plat[i].r >= plat[j].l)
    {
    plat[j].lt
    = min(plat[i].h - plat[j].h + plat[i].rt + abs(
    plat[i].r
    - plat[j].l), plat[j].lt);
    plat[j].rt
    = min(plat[i].h - plat[j].h + plat[i].rt + abs(
    plat[i].r
    - plat[j].r), plat[j].rt);
    break;
    }
    }
    if (j > n && plat[i].h <= m)
    ans
    = min(ans, plat[i].rt + plat[i].h);
    }
    printf(
    "%d\n", ans);
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    int t;
    scanf(
    "%d", &t);
    while (t--)
    {
    input();
    sort(plat, plat
    + n + 1);
    work();
    }
    return 0;
    }

  • 相关阅读:
    nginx 配置下载text等文件
    linux 挂载硬盘
    linux 常用命令
    linux 常用目录的作用
    linux 增加新用户无法使用sudo命令解决办法
    linux 安装ifconfig
    linux 更换yum源
    eclipse 环境安装
    ORACLE 迁移MYSQL 随笔
    微信跳转显示空白页
  • 原文地址:https://www.cnblogs.com/rainydays/p/2082592.html
Copyright © 2020-2023  润新知