题解
2024-11-05 18:38:30
发布于:广东
19阅读
0回复
0点赞
这一题的下标复杂,容易搞混,还需要熟悉冒泡。理清思路后贪心即可。
#include<bits/stdc++.h>
using namespace std;
vector<int> a(105),b(105);
int n;
struct node{
vector<int> code;
int step;
};
int idx(int aa,int bb){//寻找最佳下标
int mink = -1,minv = 1e9;
for(int i = 0;i < n;i ++){
if(a[i] + min(a[aa],a[bb]) <= n and b[a[i] - 1] < minv and i != aa and i != bb){
mink = i;
minv = b[a[i] - 1];
}
}
return mink;
}
int main(){
cin >> n;
for(int i = 0;i < n;i ++){
cin >> a[i];
}
for(int j = 0;j < n;j ++){
cin >> b[j];
}
int ans = 0;
for(int i = 1;i < n;i ++){//冒泡
for(int j = 0;j < n - i;j ++){
int bb = j + 1;
if(a[j] > a[bb]){
int tmp = idx(j,bb);
ans += b[a[tmp] - 1];
swap(a[j],a[bb]);
}
}
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个