第一眼感觉像是那种贪心的模板题,但是好像我思路不太对的样子?请问怎么考虑呢。。

#include<iostream>
#include<cstdio>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
long long N,ans=0;
vector<long long>A;
vector<long long>B;
bool COMPARE(pair<long long,long long>a,pair<long long,long long>b){
return a.second<=b.second;
}
int main()
{
scanf("%lld",&N);
A.resize(N,0);
B.resize(N,0);
for(long long i=0;i<N;i++) scanf("%lld",&A[i]);
for(long long i=0;i<N;i++) scanf("%lld",&B[i]);
vector<pair<long long,long long>>D;
for(long long i=0;i<N;i++){
long long d=A[i]-B[i];
pair<long,long>temp={i,d};
D.push_back(temp);
}
sort(D.begin(),D.end(),COMPARE);
long long Q=0;
for(long long i=0;i<N;i++){
if(Q>=A[D[i].first]){
Q-=A[D[i].first];
ans+=A[D[i].first];
Q+=B[D[i].first];
}else{
ans+=A[D[i].first];
Q=B[D[i].first];
}
if(i==N-1){
ans+=Q;
}
}
printf("%lld",ans);
return 0;
}


#include<iostream>
#include<cstdio>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
long long N,ans=0;
vector<long long>A;
vector<long long>B;
bool COMPARE(pair<long long,long long>a,pair<long long,long long>b){
return a.second<=b.second;
}
int main()
{
scanf("%lld",&N);
A.resize(N,0);
B.resize(N,0);
for(long long i=0;i<N;i++) scanf("%lld",&A[i]);
for(long long i=0;i<N;i++) scanf("%lld",&B[i]);
vector<pair<long long,long long>>D;
for(long long i=0;i<N;i++){
long long d=A[i]-B[i];
pair<long,long>temp={i,d};
D.push_back(temp);
}
sort(D.begin(),D.end(),COMPARE);
long long Q=0;
for(long long i=0;i<N;i++){
if(Q>=A[D[i].first]){
Q-=A[D[i].first];
ans+=A[D[i].first];
Q+=B[D[i].first];
}else{
ans+=A[D[i].first];
Q=B[D[i].first];
}
if(i==N-1){
ans+=Q;
}
}
printf("%lld",ans);
return 0;
}