zoukankan      html  css  js  c++  java
  • E

    题目链接:https://cn.vjudge.net/contest/272855#problem/E

    题目大意:给你n,a,b,k,f。n代表有n次旅行计划,然后a代表一次单程旅行的车费,b代表从下车的地方上车再到另一个地点的花费,k代表有特价券k张,f代表这样的特价券的价格,特价券的作用是从a-》b,这条路线上的任意次数任意方向上的花费都是免费的,让你求一个总共车程的最小花费。

    具体思路:看了一下别人的思路。首先,给你的路程计划是按照时间顺序来的,对于当前的状态,我们可以先记录一下上一次车程的终点,如果当前的车程的起点和上一次的车程的终点相等,那么这条路径的花费就加上b,否则就加上a。然后讲所有的路径的权值保留下来,然后排序,从最大的开始,如果当前的这条路线的总的花费大于f,那么就在原来不适用特价券的基础上减去省下的钱。

    AC代码:

    #include<bits/stdc++.h>
    #include<string>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    const int maxn =100000+100;
    # define mod 1000000007
    # define ll long long
    map<string,int>vis;
    map<pair<int,int>,int>q;
    bool cmp(int t1,int t2)
    {
        return t1>t2;
    }
    int tt[maxn];
    int main()
    {
        int n,a,b,k,f;
        cin>>n>>a>>b>>k>>f;
        string t1,t2;
        int num=0;
        int sum=0;
        int t=inf;
        for(int i=1; i<=n; i++)
        {
            cin>>t1>>t2;
            if(vis[t1]==0)
            {
                vis[t1]=++num;
            }
            if(vis[t2]==0)
            {
                vis[t2]=++num;
            }
            if(vis[t1]==t)
                q[make_pair(min(vis[t1],vis[t2]),max(vis[t1],vis[t2]))]+=b,sum+=b;
            else
                q[make_pair(min(vis[t1],vis[t2]),max(vis[t1],vis[t2]))]+=a,sum+=a;
            t=vis[t2];
        }
        int ans=0;
        for(auto i=q.begin(); i!=q.end(); i++)
        {
            tt[++ans]=i->second;
        }
        sort(tt+1,tt+1+ans,cmp);
        for(int i=1; i<=k; i++)
        {
            if(tt[i]<f)break;
            sum-=tt[i]-f;
        }
        cout<<sum<<endl;
        return 0;
    }
    
  • 相关阅读:
    共享内存
    文件IO函数和标准IO库的区别
    链表程序
    flash_header.S ( freescale imx6 board)
    深入理解二维数组
    putchar和puts
    指针目标
    C语言:break和continue
    C语言:输入输出
    python lambda
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262795.html
Copyright © 2011-2022 走看看