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;
    }
    
  • 相关阅读:
    数据库中总结2
    PyMySQL的基本使用
    数据库总结
    并发编程之多线程
    并发编程之多进程知识
    并发编程之多进程
    操作系统基础知识
    模块二总结
    Python函数进阶
    文件操作
  • 原文地址:https://www.cnblogs.com/JoshuaYu/p/13417325.html
Copyright © 2011-2022 走看看