第#2 #3 #6 #7 #8 #9 #10 TLE本地测试没问题
#include <iostream>
#include <algorithm>
using namespace std;
int score[360];
int a[130]; // a[i]表示第i次移动的步数
int cnt[5]; // 统计4种卡片的张数
int n, m, maxn;
int cal()
{
int sum = score[1], pos = 1;
for (int i = 1; i <= m; i++)
{
pos += a[i];
sum += score[pos];
}
return sum;
}
void dfs(int step, int s1, int s2, int s3, int s4)
{
if (step > m)
{
maxn = max(maxn, cal());
return;
}
if (s1 + 1 <= cnt[1])
{
a[step] = 1;
dfs(step + 1, s1 + 1, s2, s3, s4);
}
if (s2 + 1 <= cnt[2])
{
a[step] = 2;
dfs(step + 1, s1, s2 + 1, s3, s4);
}
if (s3 + 1 <= cnt[3])
{
a[step] = 3;
dfs(step + 1, s1, s2, s3 + 1, s4);
}
if (s4 + 1 <= cnt[4])
{
a[step] = 4;
dfs(step + 1, s1, s2, s3, s4 + 1);
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> score[i];
for (int i = 1; i <= m; i++)
{
int x;
cin >> x;
cnt[x]++;
}
dfs(1, 0, 0, 0, 0);
cout << maxn << endl;
return 0;
}