定义:dp[i][j] 表示 在前i个数中,使整个gcd值为j时最少取的数个数。

则有方程: gg = gcd(a[i],j)

gg == j : 添加这个数gcd不变,不添加,  dp[i][j] = dp[i-1][j]

gg != j: t添加,更新答案,                dp[i][gg] = dp[i-1][j] + 1

最后答案为dp[n][g] (g为原始的所有数的gcd)

时间复杂度: O(n*max(a[i]))

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 1000007 int dp[][];
int a[]; int gcd(int a,int b)
{
if(!b)
return a;
return gcd(b,a%b);
} int main()
{
int n,g,i,j;
scanf("%d",&n);
g = ;
int maxi = ;
for(i=;i<=n;i++)
for(j=;j<=;j++)
dp[i][j] = Mod;
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
g = gcd(g,a[i]);
maxi = max(maxi,a[i]);
dp[i][a[i]] = ;
}
//printf("%d\n",g);
for(i=;i<=n;i++)
{
for(j=;j<=maxi;j++)
{
if(dp[i-][j] != Mod)
{
int gg = gcd(a[i],j);
if(gg == j)
dp[i][gg] = min(dp[i][gg],dp[i-][j]);
else
dp[i][gg] = min(dp[i][gg],dp[i-][j] + );
}
}
}
printf("%d\n",n-dp[n][g]);
return ;
}

UESTC 923 稳住GCD DP + GCD的更多相关文章

  1. Xtreme8.0 - Play with GCD dp

    Play with GCD 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/play-with-g ...

  2. HDU 5726 GCD 区间GCD=k的个数

    GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  3. UVA 1642 Magical GCD(gcd的性质,递推)

    分析:对于区间[i,j],枚举j. 固定j以后,剩下的要比较M_gcd(k,j) = gcd(ak,...,aj)*(j-k+1)的大小, i≤k≤j. 此时M_gcd(k,j)可以看成一个二元组(g ...

  4. D - 稳住GCD DP

    http://acm.uestc.edu.cn/#/problem/show/923 给定一堆数字,求其所有数字的gcd. 现在要删除最多的数字,使得剩下的数字的gcd和原来的一样. 设dp[i][v ...

  5. [原]携程预选赛A题-聪明的猴子-GCD+DP

    题目: 聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. AIM Tech Round (Div. 2) D. Array GCD dp

    D. Array GCD 题目连接: http://codeforces.com/contest/624/problem/D Description You are given array ai of ...

  7. cf842C 树形dp+gcd函数

    树形dp用一下就好了 /* dp[i]表示不删节点的gcd值 每个结点开个vector用来存储删一个点之后的最大值 然后排序 去重 */ #include<bits/stdc++.h> # ...

  8. hdu CA Loves GCD(dp)

    一道我想骂人的题,差点把我气炸了. 题意: 求一个数的集合中(非多重集,每个数只出现一次)所有子集的gcd的和.结果MOD10^8+7输出. 输入输出不说了,自己看吧,不想写了. 当时我真把它当作数论 ...

  9. HDU 5656 CA Loves GCD dp

    CA Loves GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5656 Description CA is a fine comrade w ...

随机推荐

  1. ztree addNode editName removeNode

    1.ztree api中完全拥有以上操作的相关解释,及简单Demo. 2.主要是要学会将单独的效果组合起来使用. 2.1  如: 添加完新的Node节点之后,怎么立即进入新节点的编辑状态来修改名称(或 ...

  2. SQL数据库基础(二)

    数据类型: --类似于C#中的数据类型 Datetime   范围是:1753.1.1—— 9999.12.31 Smalldatetime      1900.1.1 ——2079.6.6 操作: ...

  3. Android 自定义带刻度的seekbar

    自定义带刻度的seekbar 1.布局 <span style="font-family:SimHei;font-size:18px;"><com.imibaby ...

  4. UnityShader之Shader分类篇【Shader资料2】

    关于ShaderLab,从我个人的理解上来看应该是分为三种类型. 1.Fixed function shader 固定渲染管线Shader,基于用于高级Shader在老显卡无法显示时的Fallback ...

  5. iOS-多线程--(pthread/NSThread/GCD/NSOperation)--总结

    零.线程的注意点(掌握) .不要同时开太多的线程(~3条线程即可,不要超过5条) .线程概念 > 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 > 子线程 : 后台线程,异 ...

  6. setSupportActionBar(toolbar)导致程序崩溃闪退

    最近在做一个项目,使用了第三方的开源项目,主要是想实现android5.0之后推出的MaterialDesign的风格,但是代码已经写好了,发现一运行就闪退,所以就开始debug,发现问题出现在 To ...

  7. WPF+Caliburn.Micro 杂记

    开发过程中的小问题总结 1DataGrid的Header里面给Checkbox绑定IsEnabled,绑不上去.  2由A页面跳转到B页面,再由B页面返回一个值 3DataGrid里面的行通过一个方法 ...

  8. Android开发者的Git&GitHub(二)

     将代码托管到GitHub上 点击右上角New repository按钮来创建一个版本库 命名后选择添加一个Android项目类型的.gitignore文件,并选择开源协议(例如:Apache v2 ...

  9. javascript 调试技巧

    不用alert,用console.log() <!DOCTYPE html> <html> <head> <script type="text/ja ...

  10. Navicat 连接 Oracle数据库 提示 cannot load OCI DLL 的解决

    一.32位系统下 cannot load OCI DLL,126 解决方法:工具->选项->OCI 选择oracle安装目录下bin里面的oci.dll 二 .在64位系统下安装了Orac ...