第一眼感觉像是那种贪心的模板题,但是好像我思路不太对的样子?请问怎么考虑呢。。 #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[lbk]i[rbk]);
for(long long i=0;i<N;i++) scanf("%lld",&B[lbk]i[rbk]);
vector<pair<long long,long long>>D;
for(long long i=0;i<N;i++){
long long d=A[lbk]i[rbk]-B[lbk]i[rbk];
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[lbk]D[lbk]i[rbk].first[rbk]){
Q-=A[lbk]D[lbk]i[rbk].first[rbk];
ans+=A[lbk]D[lbk]i[rbk].first[rbk];
Q+=B[lbk]D[lbk]i[rbk].first[rbk];
}else{
ans+=A[lbk]D[lbk]i[rbk].first[rbk];
Q=B[lbk]D[lbk]i[rbk].first[rbk];
}
if(i==N-1){
ans+=Q;
}
}
printf("%lld",ans);
return 0;
}


#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[lbk]i[rbk]);
for(long long i=0;i<N;i++) scanf("%lld",&B[lbk]i[rbk]);
vector<pair<long long,long long>>D;
for(long long i=0;i<N;i++){
long long d=A[lbk]i[rbk]-B[lbk]i[rbk];
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[lbk]D[lbk]i[rbk].first[rbk]){
Q-=A[lbk]D[lbk]i[rbk].first[rbk];
ans+=A[lbk]D[lbk]i[rbk].first[rbk];
Q+=B[lbk]D[lbk]i[rbk].first[rbk];
}else{
ans+=A[lbk]D[lbk]i[rbk].first[rbk];
Q=B[lbk]D[lbk]i[rbk].first[rbk];
}
if(i==N-1){
ans+=Q;
}
}
printf("%lld",ans);
return 0;
}

