【题解】CF264B Good Sequences

具有很明显的无后效性。

考虑\(dp\)。

考虑初始条件,显然是\(dp(0)=0\)

考虑转移,显然是\(dp(t)=max(dp[k])+1\)其中\(gcd(data[t],data[k])>1\)

这样的转移是\(O(n^2)\)的!显然超时。

发现值域\(\le 100000\)那么我们将数拆成它的质因数。

线性筛素数预处理\([1,100000]\)的质数\(O(n)\)的代价。存下来。

然后转移的时候,先直接\(O(\sqrt{n})\)枚举质因数,直接从\(vector\)表里查询能够从谁那里转移。

根据\(dp\)的最优性质,可以知道只需要从\(vector\)的最后一个 \(dp\)值转移过来就好了,一定是最大的。

这样复杂度就是\(O(n\sqrt{n})\)了

  1. #include<bits/stdc++.h>
  2. #define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
  3. #define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
  4. #define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
  5. #define Min(a,b) ((a)<(b)?(a):(b))
  6. #define pushup(x) seg[(x)]=seg[(x)<<1]+seg[(x)<<1|1]
  7. #define midd register int mid=(l+r)>>1
  8. #define chek if(R<l||r<L)return
  9. #define TMP template<class ccf>
  10. #define rgt L,R,mid,r,pos<<1|1
  11. #define lef L,R,l,mid,pos<<1
  12. #define all 1,n,1
  13. using namespace std;typedef long long ll;
  14. TMP inline ccf qr(ccf k){
  15. char c=getchar();
  16. ccf x=0;
  17. int q=1;
  18. while(c<48||c>57)q=c==45?-1:q,c=getchar();
  19. while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
  20. return q==-1?-x:x;
  21. }
  22. const int maxn=100005;
  23. const int maxl=maxn-5;
  24. bool usd[maxn];
  25. int data[maxn];
  26. #define isp(x) (!usd[x])
  27. vector < int > pr;
  28. #define pb push_back
  29. vector < int > p[100001];
  30. int n;
  31. int ans;
  32. int dp[maxn];
  33. inline void gen_pr(){
  34. usd[1]=1;
  35. usd[0]=1;
  36. RP(t,2,maxl){
  37. if(!usd[t])
  38. pr.pb(t);
  39. RP(i,0,pr.size()-1){
  40. if(t*pr[i]>maxn)
  41. break;
  42. usd[t*pr[i]]=1;
  43. if(!(t%pr[i]))
  44. break;
  45. }
  46. }
  47. }
  48. inline int Max(int x,int y){
  49. if(x>y)
  50. return x;
  51. return y;
  52. }
  53. int main(){
  54. #ifndef ONLINE_JUDGE
  55. freopen("good.in","r",stdin);
  56. freopen("good.out","w",stdout);
  57. #endif
  58. gen_pr();
  59. n=qr(1);
  60. RP(t,1,n)
  61. data[t]=qr(1);
  62. int siz=pr.size()-1;
  63. RP(t,1,n){register int sav=data[t];
  64. RP(i,0,siz){
  65. register int now=pr[i];
  66. register int nowcnt=p[now].size();
  67. if(!(sav%now)){
  68. while(!(sav%now))
  69. sav/=now;
  70. if(nowcnt)
  71. dp[t]=Max(dp[t],dp[p[now][nowcnt-1]]+1);
  72. else
  73. dp[t]=Max(dp[t],1);
  74. p[now].pb(t);
  75. }
  76. if(sav<now)
  77. break;
  78. }
  79. }
  80. ans=1;
  81. RP(t,1,n)
  82. ans=Max(ans,dp[t]);
  83. cout<<ans<<endl;
  84. return 0;
  85. }

【题解】CF264B Good Sequences的更多相关文章

  1. 洛谷CF264B Good Sequences dp

    解题报告:dp+数论 解题报告: 传送门! 开始看这题的时候想挂了,,,想了个显然是错解的想法,,,就是,我也不知道我怎么想的,鬼迷心窍地就想开个数组存每个质因数的倍数的出现次数,然后排下序的max就 ...

  2. 题解 CF1428F Fruit Sequences

    \(\texttt{Bullshit}\) 蒟蒻 \(\texttt{7 min}\) 切 \(\texttt{F}\), 挽回了本一定掉分的局面/cy 分竟然还没有别人 5 题高 (本题解为目前 c ...

  3. CF264B Good Sequences

    传送门 Description: 松鼠丽丝特别喜欢n个她称之为“好整数”的整数:a1,a2,……,an.(会输入) 现在,她对“好序列”很感兴趣.如果一个序列x1,x2,...,xk能够满足一下三个条 ...

  4. Leetcode:Repeated DNA Sequences详细题解

    题目 All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: " ...

  5. CodeForces 450B Jzzhu and Sequences(矩阵快速幂)题解

    思路: 之前那篇完全没想清楚,给删了,下午一上班突然想明白了. 讲一下这道题的大概思路,应该就明白矩阵快速幂是怎么回事了. 我们首先可以推导出 学过矩阵的都应该看得懂,我们把它简写成T*A(n-1)= ...

  6. 题解 UVA1608 【不无聊的序列 Non-boring sequences】

    思路: 算法很显然: 一.在区间\([l,r]\)找到一个只出现一次的元素P(如果不存在,那么序列\(boring\)) 二.递归处理区间\([l,p-1]\)和区间\([p+1,r]\). 其关键在 ...

  7. Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)

    题目链接 题目大意 让你构造一个严格单调上升的数组a满足\(1<=a_1<a_2<....a_n<=d\) 而且要使得这个数组的异或前缀和也满足严格单调上升,求有多少个满足条件 ...

  8. Codeforces Round #670 (Div. 2) D. Three Sequences 题解(差分+思维+构造)

    题目链接 题目大意 给你一个长为n的数组a,要你构造一个非严格单调上升的数组b和一个非严格单调下降的数组c,使得\(b_i+c_i=a_i\) 要你使这两个数组b,c中最大的元素最小,还有q次修改(q ...

  9. CF450B Jzzhu and Sequences 题解

    Content 有一个长度为 \(n\) 的数列 \(\{a_1,a_2,\dots,a_n\}\),满足如下的递推公式: \(i=1\) 时,\(a_1=x\). \(i=2\) 时,\(a_2=y ...

随机推荐

  1. 关于npm无法安装依赖包以及安装包缓慢的解决方法

    因为npm的服务器在国外,导致我们使用npm安装第三方包缓慢.而且有的第三方包是被墙的. 因此,作为墙内人,必须解决这个问题,否则开发起来实在是太坑了! 推荐大家使用淘宝的镜像(cnpm),它以每10 ...

  2. 实现一个Java五子棋

    五子棋手把手教你写: 写在前面的话: 回想起从前初学代码的五子棋简直写的不像样子.今天闲来无事就写了个五子棋的小程序. 一来呢回忆一下很久以前写代码时的感觉. 二来呢顺便帮下诸位有需求的学生,顺利的C ...

  3. 【iOS】Frame和Bounds的区别以及获取绝对坐标的办法

    终于搞清楚了,UIView中的frame获取的是相对于所在ParentView的坐标,而bounds则是指UIView本身的坐标.比如下图(假设A是屏幕): View B的Frame坐标是指相对于Vi ...

  4. LAN、WAN、WLAN的区别

    听语音 浏览:22034 | 更新:2015-06-22 20:10 | 标签:网线 1 2 3 4 5 6 7 分步阅读 好多朋友在群内问我路由器如何配置,本来还耐心解答,但是他竟然连LAN.WAN ...

  5. 从Android动画到贝塞尔曲线

    基础知识: 动画通过连续播放一系列画面,给视觉造成连续变化的图画.很通俗的一种解释.也很好理解.那么我们先来一个案例看看. 动画案例:百度贴吧小熊奔跑 效果: topic.gif 代码: <?x ...

  6. 穿透内网防线,USB自动渗透手法总结

    USB(Universal Serial Bus)原意是指通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,这套标准在1994年底由英特尔.康柏.IBM.Microsoft等多家公 ...

  7. Mycat本地模式的自增长分表操作

    Mycat对表t_rc_rule_monitor做分表操作 在mysql上执行(没有t_rc_rule_monitor) DROP TABLE IF EXISTS t_rc_rule_monitor; ...

  8. 伪静态对struts action的重写

    参见 http://ocaicai.iteye.com/blog/1312189 最重要的而是在web.xml中配置 <filter-mapping> <filter-name> ...

  9. HTML5 Support In Visual Studio 2010

    最近HTML5浪潮已经开始了,VS2010已经有一个扩展支持在HTML5智能提示.你可以从这里下载这个扩展: http://visualstudiogallery.msdn.microsoft.com ...

  10. UTF-8 可变编码格式

    转自:http://blog.csdn.net/swedenfeng/article/details/53467720   UTF-8 是一种可变编码格式,长度从一个字节到四个字节,可根据UTF-8字 ...