http://codeforces.com/problemset/problem/500/C
数组从后向前代表当前书从上向下,当前位置只要向前找,找到当前位置的书,再将之间的重量加起来就可以了,相同的数不重复加。
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int vis[505],b[1005],w[505]; int main() { int n,m,sum = 0; cin >> n >> m; for(int i = 1;i <= n;i++) cin >> w[i]; for(int i = 1;i <= m;i++) { memset(vis,0,sizeof(vis)); cin >> b[i]; for(int j = i-1;j > 0;j--) { if(b[j] == b[i]) break; if(!vis[b[j]]) { sum += w[b[j]]; vis[b[j]] = 1; } } } cout << sum << endl; return 0; }