搬运冰川 c++

问题描述

  丑枫接到了一份奇葩的工作:往冰库里搬运冰块.冰库外放着N箱冰块,由于室外温度高,冰块会很快融化,且每箱冰块的融化速度不同.因为每箱冰块的体积,质量不等,把每箱冰块搬运进冰块花费的时间也不同.因此需要合理安排搬运顺序,才能使总的冰块融化量最小.丑枫请你帮忙计算最少的总融化量是多少,以便汇报上司.

输入格式

  第一行输入整数N
  接下来N行,每行两个整数,分别表示每箱冰块的搬运耗时Ti及融化速度Di.

输出格式

  输出最少的总融化量

样例输入

6
6 1
4 5
4 3
6 2
8 1
2 6

样例输出

86

提示:题目的意思是搬运时冰块不会融化;

题目分析:

        贪心:局部最优达到全局最优

        例如冰块1和冰块2,先搬1 还是2 看它们融化量,最小的先搬;

#include<bits/stdc++.h>
using namespace std;


bool cmp(const vector<int>& a,const vector<int>& b){
    //先搬冰块a 时间a[1]*b[0],先b的话a[0]*b[1];
    return a[0]*b[1]<a[1]*b[0];
}

int main(){
    int n;
    cin>>n;
    vector<vector<int> > rs(n,vector<int>(2,0));
    int xnum;
    int ynum;
    for(int  i=0;i<n;i++){
        scanf("%d %d",&xnum,&ynum);
        rs[i][0]=xnum;
        rs[i][1]=ynum;
    }
    sort(rs.begin(),rs.end(),cmp);

   // for(int i=0;i<rs.size();i++){
   //    cout<<rs[i][0]<<' '<<rs[i][1]<<endl;
   // }
    long long sum=rs[0][0];
    long long result=0;
    for(int i=1;i<rs.size();i++){
        result+=sum*rs[i][1];
        sum+=rs[i][0];
    }
    cout<<result;


    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值