有 n 門課,第 i 門需 ai 天準備。總共有 k 天。每天只能準備一門課,準備完即可參加考試。求最多能參加幾門考試,並輸出其原始下標(任意順序)。
為了在有限天數內完成最多課程,應優先選準備時間最短的課。
算法:
(a_i, index) 存入結構體數組。#includeusing namespace std; struct Course { int time, idx; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector c(n); for (int i = 0; i < n; ++i) { cin >> c[i].time; c[i].idx = i + 1; } sort(c.begin(), c.end(), [](Course a, Course b){ return a.time < b.time; }); vector ans; for (auto &cr : c) { if (k < cr.time) break; k -= cr.time; ans.push_back(cr.idx); } cout << ans.size() << '\n'; for (int i = 0; i < ans.size(); ++i) { if (i) cout << ' '; cout << ans[i]; } if (!ans.empty()) cout << '\n'; return 0; }
CF 507A 是「貪心 + 排序 + 索引保存」的入門題。核心洞察:單位資源產出最大化 → 選成本最小項目。同類題:CF 1490C、背包問題贪心變體。