[2016-03-26][632][D][Longest Subsequence]

  • 时间:2016-03-26 11:38:31 星期六

  • 题目编号:[2016-03-26][632][D][Longest Subsequence]

  • 题目大意:给定n个数字,求最长子序列,使得它们的lcm最小公倍数小于m

  1. #include <cstdio>
  2. using namespace std;
  3. const int maxn = 1E6 + 10;
  4. int cnt[maxn];
  5. int a[maxn];
  6. int main(){
  7. int n,m;
  8. scanf("%d%d",&n,&m);
  9. for(int i = 0;i < n ; ++i){
  10. scanf("%d",&a[i]);
  11. if(a[i] <= m) ++cnt[a[i]];
  12. }
  13. for(int i = m; i >= 1;--i){
  14. for(int j = i * 2;j <= m ; j += i){
  15. cnt[j] += cnt[i];
  16. }
  17. }
  18. int kmax = cnt[1],l;
  19. for(int i = 1;i <= m ; ++i){
  20. if(kmax < cnt[i]){
  21. kmax = cnt[i];
  22. l = i;
  23. }
  24. }
  25. printf("%d %d\n",l,kmax);
  26. for(int i = 0;i < n;++i){
  27. if(l % a[i] == 0) printf("%d ",i + 1);
  28. }
  29. printf("\n");
  30. return 0;
  31. }


来自为知笔记(Wiz)


posted on 2016-03-26 11:57  红洋  阅读(154)  评论(0)    收藏  举报

导航