思路(贪心)
- 做法:我们发现,其实后看的书,一定会在前面已经看过的书的下面,所以我们按照看的书的顺序进行排序,放好初始的书的顺序,先看的放在最上面,依次类推。
代码
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=550;
int w[N];int n,m;
int f[N*2];
bool st[N];
int a[N];
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++)cin >> w[i];
int idx=1;
for(int i=0;i<m;i++){
cin >> f[i];
if(!st[f[i]]){
st[f[i]]=true;
a[idx++]=f[i];
}
}
int res=0;
for(int i=0;i<m;i++){
if(a[1]==f[i])continue;
int sum=w[a[1]];
int temp=a[1];
for(int j=2;j<=n;j++){
int t=a[j];
a[j]=temp;
temp=t;
if(f[i]==temp){
a[1]=temp;
res+=sum;
break;
}
sum+=w[temp];
}
}
cout << res;
}