[DP] Codeforces #623B. Array GCD
来源:互联网 发布:深圳岂凡网络 林秋敏 编辑:程序博客网 时间:2024/05/19 09:11
这题要找到一个突破点,不然难以下手。
注意到题面说不能全部删完,所以
这样就简单了,我们暴力得到
然后枚举质因数,就可以
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1000005,N=100000;int p[N+5];bool vis[N+5];void getP(){ for(int i=2;i<=N;i++){ if(!vis[i]) p[++p[0]]=i; for(int j=1;j<=p[0]&&(LL)i*p[j]<=N;j++){ vis[i*p[j]]=true; if(i%p[j]==0) break; } }}int b[maxn],c1,c2,d;void Work(int x){ int t=sqrt(x); for(int i=1;p[i]<=t&&x>1;i++) if(x%p[i]==0){ b[++b[0]]=p[i]; while(x%p[i]==0) x/=p[i]; } if(x>1) b[++b[0]]=x;}int n,a[maxn];LL f[maxn][3],ans,INF;void Solve(int d){ memset(f,63,sizeof(f)); f[0][0]=0; for(int i=1;i<=n;i++){ if(i>1) f[i][1]=min(f[i][1],min(f[i-1][0],f[i-1][1])+c1); LL cst; if(a[i]%d==0) cst=0; else if((a[i]+1)%d==0||(a[i]-1)%d==0) cst=c2; else cst=INF; f[i][0]=min(f[i][0],f[i-1][0]+cst); f[i][2]=min(f[i][2],min(f[i-1][1],f[i-1][2])+cst); } ans=min(ans,min(f[n][0],min(f[n][1],f[n][2]))); memset(f,63,sizeof(f)); f[0][0]=0; for(int i=1;i<=n;i++){ f[i][1]=min(f[i][1],min(f[i-1][0],f[i-1][1])+c1); LL cst; if(a[i]%d==0) cst=0; else if((a[i]+1)%d==0||(a[i]-1)%d==0) cst=c2; else cst=INF; f[i][0]=min(f[i][0],f[i-1][0]+cst); f[i][2]=min(f[i][2],min(f[i-1][1],f[i-1][2])+cst); } ans=min(ans,min(f[n][0],f[n][2]));}int main(){ freopen("cf623B.in","r",stdin); freopen("cf623B.out","w",stdout); getP(); scanf("%d%d%d",&n,&c1,&c2); if(n==1) return printf("0"),0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); Work(a[1]); Work(a[1]-1); Work(a[1]+1); Work(a[n]); Work(a[n]-1); Work(a[n]+1); sort(b+1,b+1+b[0]); b[0]=unique(b+1,b+1+b[0])-(b+1); memset(&ans,63,sizeof(LL)); INF=ans; for(int i=1;i<=b[0];i++) Solve(b[i]); if(ans>=INF) printf("-1\n"); else printf("%I64d\n",ans); return 0;}
阅读全文
0 0
- [DP] Codeforces #623B. Array GCD
- Codeforces 623B Array GCD(枚举情况+dp)
- CodeForces 623 B.Array GCD(数论+dp)
- Codeforces 623 B. Array GCD
- Codeforces 623B:Array GCD
- CodeForces 623B Array GCD
- codeforces 624d 623b Array GCD
- codeforces 624d 623b Array GCD ★ ★
- Codeforces 624D Array Gcd(数论+dp)
- CodeForces 632B Co-prime Array 【GCD(互质)】
- AIM Tech Round (Div. 1) B. Array GCD(数论+dp)
- Codeforces 512B Fox And Jumping dp+gcd
- codeforces 360B Levko and Array (dp神题)
- CodeForces 360 B.Levko and Array(二分+dp)
- CodeForces 623B【预处理+DP】
- CodeForces 624D Array GCD
- CodeForces 224B Array
- Codeforces 623A 623B dp
- thinkphp ajax无刷新分页类及实例
- kafka和spark集成启动报错java.lang.NoClassDefFoundError:org/apache/zookeeper/Watcher
- Python中函数定义及基本操作
- jquery中的数组过滤筛选-$.grep()
- 【Hadoop】提交任务时 java.net.ConnectException: 拒绝连接
- [DP] Codeforces #623B. Array GCD
- QQ空间相册密码破解2018-破解QQ空间访问权限2018
- P4,C开发笔试题三道
- [堆]51 Nod 1461——稳定桌
- 链表的增删改查
- 面试题总结
- ES6函数扩展
- 二周三次课(10月25日)
- Linux常用网络命令