zoukankan      html  css  js  c++  java
  • The 15th UESTC Programming Contest Preliminary M

    地址:http://acm.uestc.edu.cn/#/problem/show/1557

    题目:

    Minimum C0st

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

    There are NN numbers where the ithith is AiAi.

    In order to make the sum of them changed to SS, you can make some numbers increased by one or decreased by one.

    But you should spend CiCi dollars to increase or decreased AiAi by one, and the new AiAi should satisfies LiAiRiLi≤Ai≤Ri.

    Any number can be operated any times. What's the minimum cost to make the sum of all numbers changed to SS?

    Input

    The first line contains two integers N,SN,S,

    Next NN lines each line contains four integers Ai,Ci,Li,RiAi,Ci,Li,Ri.

    1N1000,1S106,1Ci1000,0LiAiRi10001≤N≤1000,1≤S≤106,1≤Ci≤1000,0≤Li≤Ai≤Ri≤1000

    Output

    If there is no solutions, print impossible.

    Otherwise, print one integer indicates the minimum cost to make the sum of all numbers changed to SS.

    Sample input and output

    Sample InputSample Output
    3 6
    1 1 1 3
    1 2 1 3
    1 3 1 3
    4

    Source

    The 15th UESTC Programming Contest Preliminary
     
    题目:排序后贪心即可
     
    代码:
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    struct nmb
    {
        int dat,cost,l,r;
    }a[1010];
    
    bool cmp(nmb a,nmb b)
    {
        return a.cost<b.cost;;
    }
    
    int n,s,sum,ans,last;
    
    int main()
    {
        cin>>n>>s;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d%d",&a[i].dat,&a[i].cost,&a[i].l,&a[i].r);
            sum+=a[i].dat;
        }
        sort(a+1,a+n+1,cmp);
        sum-=s;
        sum=-sum;
        if(sum<0)
        {
            for(int i=1;i<=n;i++)
            {
                if(sum+a[i].dat-a[i].l>0)
                {
                    last=i;
                    break;
                }
                ans+=(a[i].dat-a[i].l)*a[i].cost;
                sum+=a[i].dat-a[i].l;
            }
            ans-=sum*a[last].cost;
            if(last!=0)
                sum=0;
        }
        else if(sum>0)
        {
            for(int i=1;i<=n;i++)
            {
                if(sum+a[i].dat-a[i].r<0)
                {
                    last=i;
                    break;
                }
                ans+=(a[i].r-a[i].dat)*a[i].cost;
                sum-=a[i].r-a[i].dat;
            }
            ans+=sum*a[last].cost;
            if(last!=0)
                sum=0;
        }
        if(sum!=0)
        {
            cout<<"impossible"<<endl;
            return 0;
        }
        cout<<ans<<endl;
        return 0;
    }

     

     

  • 相关阅读:
    UOS桌面专业版:修改应用图标和应用名称
    unittest使用的时候,print的东西可以在html详情里面显示,但是又想打印在日志中,那就修logging模块中的info方法,使用装饰器
    默认端口
    HTTP HTTPS等协议默认端口
    js特殊字符转义
    vue常用rules校验规则
    HTML中的span标记和div标记
    JS === 与 ==
    Overview of Programming Concepts
    12月9日
  • 原文地址:https://www.cnblogs.com/weeping/p/6629468.html
Copyright © 2011-2022 走看看