藍橋杯--搬運冰塊--(貪心)


貪心: 2個的個例的優先級 決定了整個數列的優先級 喵喵喵

試題 算法提高 搬運冰塊
     
資源限制
時間限制:1.0s   內存限制:256.0MB
問題描述
  丑楓接到了一份奇葩的工作:往冰庫里搬運冰塊.冰庫外放着N箱冰塊,由於室外溫度高,冰塊會很快融化,且每箱冰塊的融化速度不同.因為每箱冰塊的體積,質量不等,把每箱冰塊搬運進冰塊花費的時間也不同.因此需要合理安排搬運順序,才能使總的冰塊融化量最小.丑楓請你幫忙計算最少的總融化量是多少,以便匯報上司.
輸入格式
  第一行輸入整數N
  接下來N行,每行兩個整數,分別表示每箱冰塊的搬運耗時Ti及融化速度Di.
輸出格式
  輸出最少的總融化量
樣例輸入
6
6 1
4 5
4 3
6 2
8 1
2 6
樣例輸出
86
數據規模和約定
  2<=N<=100000,1<=Ti<=4000000,1<=Di<=100
樣例說明
  按照6、2341、5的順序搬運
View problem
#include <bits/stdc++.h>
using namespace std;
#define ri register int
#define M 100005

template <class G> void read(G &x)
{
    x=0;int f=0;char ch=getchar();
    while(ch<'0'||ch>'9'){f|=(ch=='-');ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return ;
}
struct dian{
    int t,d;
}p[M];

bool cmp(dian a,dian b)
{
    return a.t*b.d<b.t*a.d;
}
int n,m;
int main(){
    
    read(n);
    long long mx=0;
    for(ri i=1;i<=n;i++)
    {
        read(p[i].t);read(p[i].d);
        mx+=p[i].d;
    }
    sort(p+1,p+1+n,cmp);
    long long ans=0;
    for(ri i=1;i<=n;i++)
    {   
        mx-=p[i].d;
        ans+=(mx*p[i].t);
        
    }
    printf("%lld",ans);
    return 0;
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM