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