zoukankan      html  css  js  c++  java
  • codeforce——思维dp

    Codeforces 822C Hacker, pack your bags!(思维)

     

    题目大意:给你n个旅券,上面有开始时间l,结束时间r,和花费cost,要求选择两张时间不相交的旅券时间长度相加为x,且要求花费最少。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long  ll;
    const int INF = 0x3f3f3f3f;
    const int moder = 10000;
    const int maxn = 2000000;
    const int M = 2e5+10;
    struct node
    {
        int l;int r;int cs;
    };
    
    bool cmp1(const node &a,const node &b)
    {
        return a.l < b.l;
    }
    bool cmp2(const node &a, const node &b)
    {
        return a.r < b.r;
    }
    ll mincost[M];
    
    ll gmin(ll a,ll b)
    {
        return a>b?b:a;
    }
    
    int main()
    {
        int n,x;
        cin >> n >> x;
        node save1[n];
        node save2[n];
        for(int i=0;i<M;i++)
            mincost[i]=INT_MAX;
        for(int i=0;i < n;i++)
        {
            cin >> save1[i].l >> save1[i].r >> save1[i].cs;
            save2[i] = save1[i];
        }
        sort(save1,save1+n,cmp1);
        sort(save2,save2+n,cmp2);
    
        int minn = INT_MAX;
        int j=0;
        for(int i=0;i < n;i++)
        {
            while(j < n&&save2[j].r < save1[i].l)
            {
                mincost[save2[j].r-save2[j].l+1] = gmin(mincost[save2[j].r-save2[j].l+1],save2[j].cs);
                j++;
            }
            int k = x-(save1[i].r-save1[i].l+1);
            if(k > 0&&minn > mincost[k]+save1[i].cs)
                minn = mincost[k]+save1[i].cs;
        }
        if(minn ==  INT_MAX)
            printf("-1
    ");
        else
            printf("%d
    ",minn);
    
        return 0;
    }

    ——

  • 相关阅读:
    ant design pro梳理
    JSON.stringify()
    数组小细节
    js this细节
    策略模式解决if-else过多
    使用useState的赋值函数异步更新问题
    Hook
    React Api
    Intent
    树的非递归遍历
  • 原文地址:https://www.cnblogs.com/cunyusup/p/8475936.html
Copyright © 2011-2022 走看看