Ranking (as of 2015-10-15): 211 out of 559
Language: C++
/* UVa 10980 - Lowest Price in Town To build using Visual Studio 2012: cl -EHsc -O2 UVa_10980_Lowest_Price_in_Town.cpp */ #include <iostream> #include <iomanip> #include <string> #include <sstream> #include <algorithm> #include <cstdio> using namespace std; const int M_max = 20, K_max = 100; struct item_price { int N_; double P_; } item_prices[M_max]; double lowest_prices[K_max + 1]; int main() { for (int case_nr = 1; ; case_nr++) { string s; istringstream iss; if (!getline(cin, s)) break; iss.str(s); double price; int M; iss >> price >> M; iss.clear(); for (int i = 0; i < M; i++) { getline(cin, s); iss.str(s); iss >> item_prices[i].N_ >> item_prices[i].P_; iss.clear(); } for (int k = 1; k <= K_max; k++) { double p = price * k; for (int i = 0; i < M; i++) { const item_price& ip = item_prices[i]; p = min(p, ip.P_ * (k + ip.N_ - 1) / ip.N_); for (int j = 1; j <= ip.N_; j++) if (k - j >= 0) p = min(p, lowest_prices[k - j] + ip.P_); else break; } lowest_prices[k] = p; #ifdef DEBUG printf("%d: %lf\n", k, p); #endif } cout << "Case " << case_nr << ":\n"; getline(cin, s); iss.str(s); int K; while (iss >> K) cout << "Buy " << K << " for $" << fixed << setprecision(2) << lowest_prices[K] << endl; iss.clear(); } return 0; }
No comments:
Post a Comment