优先队列取出i,j,ai+bi
再加入i+1,j,ai+1+bj 和 i,j+1,ai+bj+1
顺便判断是否重复添加了 i+1,j 或 i,j+1
会关注的
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a[100005],b[100005];
map<int,int>mp[100005];
struct stt{
int i,j,sum;
friend bool operator <(stt a,stt b){
return a.sum>b.sum;
}
};
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++)cin>>b[i];
priority_queue<stt>q;
q.push({1,1,a[1]+b[1]});
while(n--){
stt st=q.top();
q.pop();
int i=st.i,j=st.j;
if(mp[i][j]){
n++;
continue;
}
else mp[i][j]++;
cout<<st.sum<<" ";
q.push({i+1,j,a[i+1]+b[j]});
q.push({i,j+1,a[i]+b[j+1]});
}
}