求问如何优化,或者可以告诉我这样做不行
#include <bits/stdc++.h>
using namespace std;
int n, k, maxn = -1; pair<int, int> cow[4000]; vector<pair<int, int> > f;
bool cmp(pair<int, int> a, pair<int, int> b)
{
if (a.first != b.first) return a.first > b.first; else return a.second > b.second;
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d%d", &cow[i].first, &cow[i].second);
f.clear(); f.push_back(make_pair(0, 0));
for (int i = 1; i <= n; i++)
{
k = f.size();
for (int j = k; j <= k * 2 - 1; j++)
f.push_back(make_pair(f[j - k].first + cow[i].first, f[j - k].second + cow[i].second));
sort(f.begin(), f.end(), cmp);
for (int j = 1; j <= f.size() - 1; j++)
if (f[j].first <= f[j - 1].first && f[j].second <= f[j - 1].second)
f.erase(f.begin() + j);
}
for (int i = 0; i <= f.size() - 1; i++)
if (f[i].first >= 0 && f[i].second >= 0) maxn = max(maxn, f[i].first + f[i].second);
printf("%d\n", maxn);
return 0;
}