// UVa 990 - Diving for Gold #include <iostream> #include <string.h> #include <vector> #include <algorithm> using namespace std; #define datatype signed long long int int main() { int t, cases = 0; datatype w; while (cin >> t >> w) { cases++; int n; cin >> n; datatype d[30], v[30], c[30]; for (int i = 0; i < n; i++) { cin >> d[i] >> v[i]; c[i] = 3 * w * d[i]; } datatype T[1001]; bool R[30][1001]; memset(R, false, sizeof(R)); memset(T, 0, sizeof(T)); for (int i = 0; i < n; i++) { for (datatype j = t - c[i]; j >= 0; j--) { if (T[j + c[i]] < T[j] + v[i]) { T[j + c[i]] = T[j] + v[i]; R[i][j + c[i]] = true; } } } vector<int> seq; int s = t; for (int i = n - 1; i >= 0; i--) { if (R[i][s]) { seq.push_back(i); s -= c[i]; } } sort(seq.begin(), seq.end()); if (cases > 1) cout << endl; cout << T[t] << endl; cout << seq.size() << endl; for (int i = 0; i < seq.size(); i++) cout << d[seq[i]] << " " << v[seq[i]] << endl; } return 0; }
Friday, June 12, 2015
UVa 990 - Diving for Gold
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment