描述 Description

    小Q很喜欢玩最近才推出的经营餐厅游戏,他昼夜守在电脑前,于是他的餐厅赚了好多好多钱。赚了钱就要花的嘛,小Q决定在这款游戏里的商店购买商品。  这个商店里有N个商品,商品的库存都足够多,第i个商品的初始价格是Cost[i],每多买一个,商品的价格会上升Up[i]元。(这个世界都是物以稀为贵的啦)  小Q想买M件商品,他想知道买M件商品最少要多少钱。

输入格式 Input Format 

   第一行2个数N,M。分别表示有N个商品,小Q想买M件商品。接下来N行,每行两个数Cost[i],Up[i]。

输出格式 Output Format

   只有一行,为买M件物品最少要花的费用。

#include<iostream>
using namespace std;
int n,m,ans=0;
int cost[1500],up[1500];

void hsort(int l,int r)
{
     int i=l,j;
     while (i<=(r>>1))
     {
           j=i*2;
           if (j<r&&cost[j]>cost[j+1]) j++;
           if (cost[i]>cost[j]) {swap(cost[i],cost[j]);swap(up[i],up[j]);i=j;}else break;
     }
}

int main()
{
    cin>>n>>m;
    for (int i=1;i<=n;i++) cin>>cost[i]>>up[i];
    for (int i=n>>1;i>0;i--) hsort(i,n);
//    for (int i=n;i>1;i--) {swap(cost[1],cost[i]);swap(up[1],up[i]);hsort(1,i-1);}
    for (int i=1;i<=m;i++) 
    {
        ans+=cost[1];
        cost[1]+=up[1];
        hsort(1,n);
    }
    cout<<ans<<endl;
    return 0;
}