zoukankan      html  css  js  c++  java
  • b_51_最小旅行路线(列举所有可能)

    景区中有2n个景点,坐标分别是1..2n,美丽值为1..n的景点各有两个。A,B两人想分别从1出发,
    按照美丽值1…n的顺序访问景点,且他们都不会访问那些被对方访问过的景点(经过景点时可以选择访问,也可以选择不访问)。
    问两个人最小的旅行线路距离和最小是多少。

    思路:没啥营养的题目

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+5;
    ll n,a[N],f[N][2]; //f[i][0/1]表示游客0/1的坐标为i的的美丽值,策略是0/1两个游客都不能访问同一美丽值的景点
    vector<int> v[N];
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        cin>>n; for (int i=0; i<2*n; i++) cin>>a[i];
        for (int i=0; i<2*n; i++) v[a[i]].push_back(i);
        memset(f,0x3f3f3f3f,sizeof f);
        f[1][0]=f[1][1]=v[1][0]+v[1][1];
        for (int i=2; i<=n; i++) {
            ll ac=abs(v[i][0]-v[i-1][0]), bd=abs(v[i][1]-v[i-1][1]);
            ll ad=abs(v[i][1]-v[i-1][0]), bc=abs(v[i][0]-v[i-1][1]);
            f[i][0]=min(ac+bd,ad+bc)+f[i-1][0]; //玄学,这写f[i-1][1]也行
            f[i][1]=min(ac+bd,ad+bc)+f[i-1][1];        
        }
        cout<<min(f[n][0], f[n][1]);
        return 0;
    }
    
  • 相关阅读:
    flex
    两端对齐
    background-clip、background-origin、box-sizing
    animation
    transform translate transition 的区别
    如何将页脚固定在页面底部
    normalize.css
    使用 Swift 制作一个新闻通知中心插件(1)
    在 App 扩展和主 App 间共享数据
    asp.net core Cookie认证
  • 原文地址:https://www.cnblogs.com/wdt1/p/13904489.html
Copyright © 2011-2022 走看看