# codeforces 624d 623b Array GCD ★ ★

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define L(i) i<<1
#define R(i) i<<1|1
#define INF  0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-9
#define maxn 1000100
#define MOD 1000000007

long long dp[maxn][3];
int val[maxn];
long long a,b;
int prime[maxn];
int vis[maxn];
int n,cnt,fac[maxn];

void init()
{
cnt = 0;
for(int i = 2; i < maxn; i++)
{
if(!vis[i])
prime[cnt++] = i;
for(int j = 0; j < cnt && prime[j]*i < maxn; j++)
{
vis[prime[j]*i] = 1;
if(i%prime[j] == 0)
break;
}
}
}
long long solve(int st,int ed,int v)
{
memset(dp,0x3f3f3f3f3f3f3f3f,sizeof(dp));
dp[st-1][0] = 0;
for(int i = st; i <= ed; i++)
{
dp[i][1] = min(dp[i-1][0],dp[i-1][1]) + a;
if(val[i] % v != 0)
{
if((val[i]+1)%v == 0 || (val[i]-1)%v==0)
{
dp[i][0] = dp[i-1][0] + b;
dp[i][2] = min(dp[i-1][1],dp[i-1][2]) + b;
}
}
else
{
dp[i][0] = dp[i-1][0];
dp[i][2] = min(dp[i-1][1],dp[i-1][2]);
}
}
return min(min(dp[ed][0],dp[ed][1]),dp[ed][2]);
}
int factor(int x)
{
int tot = 0;
for(int j = 0; j < cnt && x >= prime[j]; j++)
{
if(x%prime[j] == 0)
{
fac[tot++] = prime[j];
while(x%prime[j] == 0)
x /= prime[j];
}
}
if(x != 1)
fac[tot++] = x;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t,C = 1;
//scanf("%d",&t);
init();
while(scanf("%d%lld%lld",&n,&a,&b) != EOF)
{
for(int i = 1; i <= n; i++)
scanf("%d",&val[i]);
long long ans = a * (long long)n;
for(int i = -1; i <= 1; i++)
{
long long cost = i == 0?0:b;
int len = factor(val[n]+i);
for(int j = 0; j < len; j++)
ans = min(ans,solve(1,n-1,fac[j])+cost);

len = factor(val[1]+i);
for(int j = 0; j < len; j++)
ans = min(ans,solve(2,n,fac[j])+cost);
}
printf("%lld\n",ans);
}
return 0;
}


• 本文已收录于以下专栏：

## Codeforces 624D Array Gcd(数论+dp)

• Jeremy1149
• 2016年10月24日 17:59
• 172

## codeforces 624d 623b Array GCD

• u011528035
• 2016年02月19日 17:04
• 362

## Codeforces 623B：Array GCD

B. Array GCD time limit per test 3 seconds memory limit per test 256 megabytes inpu...
• u010885899
• 2016年02月23日 19:49
• 830

## CodeForces 624D Array GCD

• LsFlyt
• 2016年02月21日 20:34
• 298

## CodeForces 623B Array GCD

CodeForces 623B Array GCD数论 dp 传送门：HustOJ 传送门：CodeForce 题意给你个数组，允许进行两种操作各最多一次。 第一种操作，删除某一区间内...
• xzxxzx401
• 2017年02月18日 16:30
• 202

## 【dp】CodeForces - 623B Array GCD

Link：http://codeforces.com/problemset/problem/623/B #include #include #include #include #include #i...
• qq_33199236
• 2017年07月27日 09:15
• 107

## Codeforces 623B Array GCD（枚举情况+dp）

• Miracle_ma
• 2016年09月13日 21:17
• 226

## CodeForces - 582A GCD Table （map大数操作&gcd）好题

CodeForces - 582A GCD Table Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO For...
• yanghui07216
• 2016年04月30日 16:42
• 614

## hdu 4947 GCD Array 莫比乌斯反演

GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot...
• NExPlain
• 2014年08月14日 21:53
• 1920

## Codeforces 803F Coprime Subsequences DP+GCD

• Jeremy1149
• 2017年05月16日 18:05
• 209

举报原因： 您举报文章：codeforces 624d 623b Array GCD ★ ★ 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)