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;
    }

     

     

  • 相关阅读:
    AIX配置时间服务器(NTP)
    weblogic的集群与配置
    Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)
    什么是条带化(striping) ?(转载)
    ORACLE directory 目录--转载
    Linux安装MySQL的两种方法
    Goldengate trial队列维护
    Oracle GoldenGate 11.2 OGG-01168(转)
    编程之美---最大公约数
    敏感词过滤的算法原理之DFA算法
  • 原文地址:https://www.cnblogs.com/weeping/p/6629468.html
Copyright © 2011-2022 走看看