[AtCoder] ABC 195 D – Shipping Center
問題
方針
価値が高い荷物からその大きさに最も近い箱に入れます。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct Data { ll w, v; Data(ll w, ll v) : w(w), v(v) {} bool operator < (const Data &d) const { if (d.v == v) { return d.w > w; } else { return d.v < v; } } }; int main() { int N, M, Q; cin >> N >> M >> Q; vector<Data> d; int X[M]; ll W, V; for (int i = 0; i < N; i++) { cin >> W >> V; d.push_back(Data(W, V)); } for (int i = 0; i < M; i++) { cin >> X[i]; } int L, R; sort(d.begin(), d.end()); // for (Data i : d) { // cout << i.v << " " << i.w << "\n"; // } for (int i = 0; i < Q; i++) { cin >> L >> R; ll ans = 0; L--; R--; bool flag[M] = {}; for (int j = 0; j < N; j++) { int id = -1; for (int k = 0; k < M; k++) { if (L <= k && k <= R) continue; if (!flag[k] && d[j].w <= X[k]) { if (id == -1) { id = k; } else if (X[k] < X[id]) { id = k; } } } if (id != -1) { ans += d[j].v; flag[id] = true; } } cout << ans << "\n"; } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません