codeforces 624d 623b Array GCD
来源:互联网 发布:网络贷款是真的吗 编辑:程序博客网 时间:2024/05/04 23:40
过年玩了20天 都不会写了
题意:有两种操作,每种只能用一次,第一种对于一段连续区间进行移除(不能全删完),代价是长度*a,第二种是对于一些数进行+1或者-1,使得最后的剩余的最大公约数大于1
思路:由于不能全删完,所以至少会有一个数留着,这个数肯定会是头一个或最后一个,最大公约数肯定是在选中的这个数最后状态中的一个约数,而我们只要先枚举这个数是多少(一共6种),然后枚举他的素因子,用dp顺推即可。
#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>#include<queue>#include<math.h>using namespace std;#define LL long long#define N 1000010LL dp[N][3];int a[N];LL cost1,cost2;int prime[N];int vis[N];int cnt;int fac[N];void init(){ for(int i=2;i<N;i++) { if(!vis[i])prime[cnt++]=i; for(int j=0;j<cnt&&prime[j]*i<N;j++) { vis[prime[j]*i]=1; if(i%prime[j]==0)break; } }}LL getAns(int st,int ed,int v){ memset(dp,0x3f,sizeof(dp)); //printf("%lld",dp[0][0]); dp[st-1][0]=0; for(int i=st;i<=ed;i++) { dp[i][1]=min(dp[i-1][0],dp[i-1][1])+cost1; if(a[i]%v!=0) { if((a[i]+1)%v==0||(a[i]-1)%v==0) { dp[i][0]=dp[i-1][0]+cost2; dp[i][2]=min(dp[i-1][1],dp[i-1][2])+cost2; } } 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; return tot;}int main(){ init(); int n; scanf("%d%lld%lld",&n,&cost1,&cost2); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } LL ans=cost1*(LL)n; for(int i=-1;i<=1;i++) { LL cost=i==0?0:cost2; int siz=factor(a[n]+i); for(int j=0;j<siz;j++) ans=min(ans,getAns(1,n-1,fac[j])+cost); siz=factor(a[1]+i); for(int j=0;j<siz;j++) ans=min(ans,getAns(2,n,fac[j])+cost); } printf("%lld\n",ans); return 0;}
0 0
- codeforces 624d 623b Array GCD
- codeforces 624d 623b Array GCD ★ ★
- CodeForces 624D Array GCD
- Codeforces 623 B. Array GCD
- Codeforces 623B:Array GCD
- CodeForces 623B Array GCD
- Codeforces 624D Array Gcd(数论+dp)
- [DP] Codeforces #623B. Array GCD
- Codeforces 623B Array GCD(枚举情况+dp)
- CodeForces 623 B.Array GCD(数论+dp)
- Educational Codeforces Round 4 D. Array GCD
- CodeForces 632B Co-prime Array 【GCD(互质)】
- 【CODEFORCES】 D. Interesting Array
- CodeForces 224B Array
- codeforces 338D GCD Table
- codeforces 338D GCD Table
- Codeforces Round #428 (Div. 2) B 细节 D gcd预处理因子+容斥
- Codeforces Round #432 (Div. 2) D 850B Arpa and a list of numbers(gcd 枚举)
- 模仿360水晶球的效果
- Sublime Text 3 快捷键精华版
- 金子也要很努力才能发光,何况是顽石
- linux上调试崩溃程序
- 指针练习
- codeforces 624d 623b Array GCD
- mongo 命令
- Mysql避免全表扫描sql查询优化
- 表达式求值 中缀式转换成后缀式
- git的ssh连接配置
- IOS第四天_面向对象2
- 查看Linux进程CPU过高具体的线程堆栈(不中断程序)
- 获得两个日期之间的所有日期
- android 解决沉浸式状态栏下adjustResize失效