贪心,1 尽量将道具用在花费时间大的关卡 2 对于你想要用道具的关卡,尽量用离这个关卡前面最近的道具 比如你想在第6关使用道具,第3关和第5关各获得一个道具,那么用第5关的道具 #include <bits/stdc++.h> using namespace std; int main() { // 5 4 4 1 1 1 // 4 6 3 5 2 1 // 5 3 int n, k; cin >> n >> k; set < int, greater<> > se; map <int, vector<int> , greater<> > ma; for (int i = 1, j = 1; i <= n; i++) { int x; cin >> x; ma[x].push_back(i); if (i == k * j + 1) { se.insert(i); j++; } } long long int ans = 0; for (auto it : ma) { for (int i = it.second.size() - 1; i >= 0; i--) { int nowi = it.second[i]; int nowx = it.first; //for(auto ik:se) cout<<ik<<' ';cout<<'\n'; if(se.size() == 0 || *se.rbegin() > nowi) { ans += nowx; //cout<<"1:"<<nowi<<","<<nowx<<'\n'; continue; } se.erase( se.lower_bound(nowi) ); //cout<<"2:"<<nowi<<","<<nowx<<'\n'; } } cout<<ans<<'\n'; return 0; }