zoukankan      html  css  js  c++  java
  • CF264BGood Sequences

    CF264BGood Sequences

    题面

    大意

    寻找最长递增字串,使得相邻两个数不互质。

    思路

    动态规划思想,ans记录当前的数以下标i为约数答案,使得需要填进去的数肯定与前一个数不互质。在开始前根据数据先打表记录每个数的最小约数,然后就可以得到,循环遍历数组,对每个数存在的可能最长子序列,一定有在ans数组中以该数的约数作为下标的最大值为先前的序列的最大值,然后再次循环将ans数组中每一个下标为该数约数的位置赋值为刚刚求出的最大值加1,相当于所有的约数部分可以与下一个数匹配生成再下一个循环。

    可能不是讲的很清楚,所以在代码中还有注释。

    代码

    #include<iostream>
    using namespace std;
    int sign[100005], ans[100005];
    int main() {
        for(int i=2;i<100005;i++) {
            if(!sign[i]) {
                for(int j=i;j<100005;j+=i) {
                    if(!sign[j]) {
                        sign[j] = i;// 标记每个数的最小约数
                    }
                }
            }
        }
        int n, m;
        cin >> n;
        for(int i=1;i<=n;i++) {
            int temp, num;
            cin >> num;
            temp = num;
            m = 0;
            while(temp>1) {
                m = max(m, ans[sign[temp]]);// 获取之前数里的约数的个数最大值
                temp/=sign[temp]; // 去掉这个约数
            }
            temp = num;
            while(temp>1) {
                ans[sign[temp]] = m+1;// 给所有约数所在的位置赋值为最大约数个数+1
                temp/=sign[temp]; // 去掉这个约数
            }
        }
        m = 1;
        for(int i=1;i<=n;i++) {
            m = max(m, ans[i]);
        }
        cout << m;
    }
    
  • 相关阅读:
    ionic2简单分析
    mvc的真实含义
    JavaSE学习总结(十七)—— IO流
    vs2010快捷键;sql server 2008快捷;IE9快捷键
    设计模式之六大设计原则
    通过peview分析PE文件
    游戏限制多开原理及对应方法
    inline hook原理和实现
    vm tools安装包为空
    Linux下PWN环境搭建
  • 原文地址:https://www.cnblogs.com/JoshuaYu/p/13417325.html
Copyright © 2011-2022 走看看