萌新求助
查看原帖
萌新求助
734172
_hsr_楼主2022/8/5 22:02

第#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;
}
2022/8/5 22:02
加载中...