zoukankan      html  css  js  c++  java
  • [CF1499C] Minimum Grid Path

    [CF1499C] Minimum Grid Path - 贪心

    Description

    n×n的矩阵,让你从 (0,0) 走到 (n,n),每次只能向上走或者向右走且步长至少为1,而且走完之后必须换方向,最多换n-1次方向,也就是走n段路,每段都都有一个权值,这段路的计算代价为这次走的长度×这段路的权值 (c[i]),求最小的代价

    Solution

    奇数偶数分开考虑,显然是相互独立的,对于一个部分,我们一定将最小的那个代价分配尽可能多,剩下的长度全是 (1)

    特别注意“至少”

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n;
        cin >> n;
        vector<int> c(n + 2);
        for (int i = 1; i <= n; i++)
            cin >> c[i];
        int sum[2] = {0, 0}, mx[2];
        memset(mx, 0x3f, sizeof mx);
        int res = 1e18;
        for (int i = 1; i <= n; i++)
        {
            sum[i & 1] += c[i];
            mx[i & 1] = min(mx[i & 1], c[i]);
            if (i >= 2)
            {
                int ans = 0;
                if (i & 1)
                {
                    ans += sum[1] - mx[1];
                    ans += (2 * n - i + 1) / 2 * mx[1];
                    ans += sum[0] - mx[0];
                    ans += (2 * n - i + 3) / 2 * mx[0];
                }
                else
                {
                    ans += sum[1] - mx[1];
                    ans += (2 * n - i + 2) / 2 * mx[1];
                    ans += sum[0] - mx[0];
                    ans += (2 * n - i + 2) / 2 * mx[0];
                }
                res = min(res, ans);
            }
        }
        cout << res << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    Python与mongo交互
    MongoDB数据库操作
    爬虫之xpath解析库
    selenium常用操作
    无头浏览器的使用
    BeautifulSoup库使用
    urllib简单介绍
    爬虫自动化工具防检测
    支付宝支付
    TortoiseSVN使用教程[多图超详细]
  • 原文地址:https://www.cnblogs.com/mollnn/p/14603880.html
Copyright © 2011-2022 走看看