4046 - 运输问题
时间限制 : 1 秒
内存限制 : 128 MB
现在已知N件商品,和搬运它们其中每一件的费用。现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品。然后这2件商品只算一件商品的费用。但是这个商品的搬运费用是将选出的2个商品的费用之和除以k的运算结果。如此反复。直到只收一件商品的钱。这个就是商店要付的费用。掌柜的想尽可能的少付钱,以便将更多的钱捐给希望工程。所以请你帮他计算一下最少只用付多少钱。
题目输入
n,k(n和k<=10000)
w1,w2.....wn(每一件物品搬运费)
题目输出
输出一个数字,表示最少付多少钱
输入/输出样例
输入格式
5 2 1 2 3 4 5
输出格式
1
C++解答
#include<iostream> #include<algorithm> using namespace std; const int N = 10005; int a[N]; int main(){ int n,k; cin>>n>>k; for (int i=1; i<=n; i++) cin>>a[i]; sort(a+1,a+n+1); for (int i=n,x,j; i>=2; i--){ x=(a[i]+a[i-1])/k; j=i-2; while (x<a[j]){ a[j+1]=a[j]; j--; } a[j+1]=x; } cout<<a[1]<<endl; return 0; }