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