cqm 解题报告e
来源:互联网 发布:淘宝羊毛衫 编辑:程序博客网 时间:2024/05/18 18:22
http://acm.cqu.edu.cn/oj/problem_show.php?pid=21463
这题本人较弱。。赛间只会TLE的算法。赛后看标程才会的。
下面附上代码。
#include<iostream>#include<algorithm>#include<queue>#include<cstdio>#include<cstring>using namespace std;const int INF=1e9;const int maxn=1e5;int dp[maxn];//表示以素因子j结尾的前i个数的最长序列int vis[maxn];//vis[i]表示i的最大素因子int a[maxn];void make_prime(){ for(int i=2;i<=maxn;i++) { if(!vis[i]) { for(int j=i;j<maxn;j+=i) vis[j]=i; } }}int main(){ make_prime(); int t; scanf("%d",&t); while(t--) { int n; memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int maxx=0; for(int i=0;i<n;i++) { int x=0; for(int j=a[i];j>1;j/=vis[j])//枚举数的约数 x=max(x,dp[vis[j]]); for(int j=a[i];j>1;j/=vis[j]) dp[vis[j]]=max(x+1,dp[vis[j]]); maxx=max(x+1,maxx); } printf("%d\n",maxx); } return 0;}
这种题目一般都有套路nlogn的子序列算法,有且只有一个。
数据范围可知,一定还要围绕这个算法开发,第二,gcd(a,b)=1,没有公约数,
没有公约数,那么考虑筛出素数。2个思路结合一下,方法就出来了。。
还有对时间复杂度要会计算,看到1000,就是n^2logn。看到5000就是n^2,看到10000,nlogn, nsqrtn,nlognlogn,看到100000就是nlogn,1000000一般是O(n)。
0 0
- cqm 解题报告e
- cqm解题报告02
- cqm解题报告I
- cqm解题报告03
- cqm解题报告F
- cqm解题报考01
- cqm题解报告04
- u Calculate e解题报告
- E - Easy Task 解题报告
- codeforce-24e 解题报告
- E - A + B解题报告
- 7/21 E 解题报告
- CodeChef SnakeDown2017 E解题报告
- HDOJ 1012 u Calculate e解题报告
- E - Biorhythms解题报告(来自网络)
- E - I Love You Too解题报告
- E - Pipe解题报告(来自网络)
- E - Frogger解题报告(吴忠健)
- 从零开始nodejs系列文章
- 瞬驰(Dash)D1开发手册--超声波传感器v1版
- Java学习-常用排序稳定性分析
- 如何在AndroidStudio中导入Module
- 对用java语言生成pdf文件的一些补充
- cqm 解题报告e
- 如何生成PairRDD
- Android枚举类引用实例
- 最长公共子串
- 文章标题
- SharedPreferences
- hrbust/哈理工oj 1334 最好的心情【求最长递增子序列&&最大值】
- Unlucky Number I
- PS基础知识二