Description
很多序列_题解

Input
很多序列_题解_02

Output
很多序列_C_03

Sample Input
2
4 7

Sample Output
17

Data Constraint
很多序列_题解_04

思路

考虑建图跑,从每个点的u按边权为x[i]向(u+x[i])%x[1]
跑spfa,答案就是最大取不到的数(最大值-x1)

代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n;
long long a[7],visit[1000010],dis[1000010],ans;
queue<int> q;
int main()
{
	freopen("sequence.in","r",stdin);
	freopen("sequence.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
	if (n==2)
	{
		printf("%lld",a[1]*a[2]-a[1]-a[2]);
		return 0;
	}
	memset(dis,-1,sizeof(dis));
	q.push(0),visit[0]=1,dis[0]=0;
	while (!q.empty())
	{
		int u=q.front(); q.pop(),visit[u]=0;
		for (int i=2;i<=n;i++)
		{
			long long v=(u+a[i]%a[1])%a[1];
			if (dis[v]==-1||dis[u]+a[i]<dis[v])
			{
				dis[v]=dis[u]+a[i];
				if (!visit[v]) q.push(v),visit[v]=1;
			}
		}
	}
	ans=-1;
	for (int i=1;i<a[1];i++) ans=max(ans,dis[i]);
	printf("%lld",ans-a[1]);
}