AOJ 0567 - 最高のピザ

大きいトッピングから選べばいいんだろうなと考えてました.
何かわけわからない計算したら条件式ができてました.
価値が下がるか計算するだけでいいと気づきましたが,後の祭りでした.

#include <iostream>
#include <vector>
#include <algorithm>

int main(){
	int n, a, b, dc;
	std::cin >> n >> a >> b >> dc;
	std::vector<int> v;
	for(int i=0;i<n;i++){
		int c;
		std::cin >> c;
		v.push_back(c);
	}
	
	std::sort(v.begin(), v.end(), std::greater<int>());
	
	int max_c = 0, selected_n = 0;
	for(int i=0;i<n;i++){
		if((a+i*b)*v[i]>b*(dc+max_c)){
			max_c += v[i];
			selected_n++;
		}else{
			break;
		}
	}
	std::cout << static_cast<int>(1.0*(max_c+dc)/(a+selected_n*b)) << std::endl;
}