CF #div.1 B.good sequences
来源:互联网 发布:红蚂蚁网络与阿里巴巴 编辑:程序博客网 时间:2024/06/05 08:17
不会DP真不行啊,要开始练习DP了
给n个数,他们是严格上升序列,问他们的最大个数的子序列保持严格上升且相邻两个有公约数。
一个数组max[j]去记录 当前子串的最后一个数 含有因子j的 最长长度。另一个数组dp[x]去记录最后一个数是数x的最长长度。
那么dp[x] = Max(dp[x],Max(max[j],max[x/j])+1);
然后更新max[j] max[x/j]为dp[x] 因为dp[x]肯定是当前含有因子j x/j 的最大子序列值
最后遍历一遍dp[x]找最大。
#include<stdio.h>#include<string.h>using namespace std;#define INF 10000000int n,su[100001],dp[100001],max[100001];int Max(int a,int b){return a>b?a:b;}int main(){ while(scanf("%d",&n)!=EOF){ memset(max,0,sizeof(max)); memset(dp,0,sizeof(dp)); int x=0;for(int i=0;i<n;i++){scanf("%d",&x);dp[x]=1;for(int j=2;j*j<=x;j++){if(x%j==0){dp[x]=Max(dp[x],Max(max[j],max[x/j])+1);}}for(int j=1;j*j<=x;j++){if(x%j==0){max[j]=dp[x];max[x/j]=dp[x];}}}int ans=0;for(int i=0;i<=x;i++){if(ans<dp[i])ans=dp[i];}printf("%d\n",ans);} return 0;}
0 0
- CF #div.1 B.good sequences
- cf#257(Div.2) B. Jzzhu and Sequences
- Codeforces 264B (Good Sequences)
- Codeforcrs 264B Good Sequences
- Good Sequences(codeforces 264B)
- codeforces 264B Good Sequences
- codeforces 264b Good Sequences dp
- codeforce 246B——Good Sequences
- codeforces #264B Good Sequences (dp)
- CodeForces 264B Good Sequences dp
- Codeforces 264B Good Sequences (dp)
- Codeforces 264B Good Sequences【dp+思维】
- Jzzhu and Sequences(CF #257 Div. 2)
- (CF#257)B. Jzzhu and Sequences
- CF 450B Jzzhu and Sequences
- CF 450B Jzzhu and Sequences
- Codeforces Round #257 (Div. 2)1B Jzzhu and Sequences
- cf#238 (Div. 1) B. Toy Sum
- 开始努力的自己(番外)视频剪辑
- php对象与数组的区别,类与对象的联系
- <strong>和<b>的区别
- Android sqlite本地数据库
- 在eclipse中查看jdk源码
- CF #div.1 B.good sequences
- 链表操作
- UICollectionView介绍
- UIWindow的一点儿思考
- Longest Palindromic Substring
- java的接口问题!
- c语言实现抽象数据类型(信息隐藏)
- java接口的细节!
- VC 6.0 编译支持中文的LUA5.23静态库