代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1010;
int n;
bool st[N];
struct node
{
int redu, ddl;
bool operator< (const node& x)const {
if (ddl == x.ddl) return redu > x.redu;
return ddl < x.ddl;
}
} nod[N];
struct nodeI
{
int redu, ddl;
bool operator< (const nodeI& x)const {
return redu > x.redu;
}
};
signed main()
{
int T; cin >> T;
while (T--)
{
memset(st, false, sizeof st);
int sum = 0;
cin >> n;
for (int i = 1; i <= n; ++i)
{
int ddl; cin >> ddl;
nod[i].ddl = ddl;
}
for (int i = 1; i <= n; ++i)
{
int redu; cin >> redu;
nod[i].redu = redu;
sum += redu;
}
sort(nod + 1, nod + n + 1);
priority_queue<nodeI> heap;
int day = 1, res = 0;
for (int i = 1; i <= n; ++i)
{
int d = nod[i].ddl, r = nod[i].redu;
if (day <= d)
{
heap.push({ r, d });
res += r;
++day;
}
else if(day > d)
{
auto tmp = heap.top();
int dd = tmp.ddl, rr = tmp.redu;
if (rr < r)
{
heap.pop(), res -= rr;
heap.push({ r, d }), res += r;
}
else continue;
}
}
//cout << sum << ' ' << res << '\n';
cout << sum - res << '\n';
}
return 0;
}
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 10010;
int n;
struct node
{
int p, d;
bool operator< (const node& x)const {
if (d == x.d) return p > x.p;
return d < x.d;
}
} nod[N];
struct nd
{
int val, time;
bool operator< (const nd& x)const {
return val > x.val;
}
};
signed main()
{
int T = 1; //cin >> T;
while (T--)
{
while (cin >> n)
{
if (!n)
{
puts("0");
continue;
}
for (int i = 1; i <= n; ++i) cin >> nod[i].p >> nod[i].d;
sort(nod + 1, nod + n + 1);
int day = 1;
priority_queue<nd> heap;
int res = 0;
for (int i = 1; i <= n; ++i)
{
if (day <= nod[i].d) {
heap.push({ nod[i].p, nod[i].d });
res += nod[i].p;
day++;
}
else {
if (heap.size()){
auto top = heap.top();
if (top.val < nod[i].p) {
res -= top.val;
heap.pop();
heap.push({ nod[i].p, nod[i].d });
res += nod[i].p;
}
}
}
}
cout << res << '\n';
}
}
return 0;
}
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1.5e5 + 10;
int n;
struct node
{
int use;
int ddl;
bool operator< (const node& x)const {
if (ddl == x.ddl) return use < x.use;
return ddl < x.ddl;
}
} nod[N];
struct nd
{
int use;
int ddl;
bool operator< (const nd& x)const {
return use < x.use;
}
};
signed main()
{
int T = 1; //cin >> T;
while (T--)
{
cin >> n;
for (int i = 1; i <= n; ++i)
{
scanf("%lld%lld", &nod[i].use, &nod[i].ddl);
}
sort(nod + 1, nod + n + 1);
int time = 0, cnt = 0;
priority_queue<nd> heap;
for (int i = 1; i <= n; ++i)
{
time += nod[i].use;
if (time <= nod[i].ddl)
{
++cnt;
heap.push({ nod[i].use, nod[i].ddl });
}
else
{
time -= nod[i].use;
if (heap.top().use > nod[i].use && heap.size())
{
auto t = heap.top(); heap.pop();
time -= t.use;
time += nod[i].use;
heap.push({ nod[i].use, nod[i].ddl });
}
}
}
cout << cnt << '\n';
}
return 0;
}