版权声明:转载者乖乖♂站好 https://blog.csdn.net/Eric1561759334/article/details/82750270
Description
Input
Output
Sample Input
2
4 7
Sample Output
17
Data Constraint
思路
考虑建图跑,从每个点的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]);
}