D. Simple Subset

题目连接:

http://www.codeforces.com/contest/665/problem/D

Description

A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i,  j) (1  ≤ i  <  j ≤ k), xi  +  xj is a prime.

You are given an array a with n positive integers a1,  a2,  ...,  an (not necessary distinct). You want to find a simple subset of the array a with the maximum size.

A prime number (or a prime) is a natural number greater than 1 that has no positive divisors other than 1 and itself.

Let's define a subset of the array a as a tuple that can be obtained from a by removing some (possibly all) elements of it.

Input

The first line contains integer n (1 ≤ n ≤ 1000) — the number of integers in the array a.

The second line contains n integers ai (1 ≤ ai ≤ 106) — the elements of the array a.

Output

On the first line print integer m — the maximum possible size of simple subset of a.

On the second line print m integers bl — the elements of the simple subset of the array a with the maximum size.

If there is more than one solution you can print any of them. You can print the elements of the subset in any order.

Sample Input

2
2 3

Sample Output

2
3 2

Hint

题意

给你n个数,你需要找到一个最大的子集,使得这个子集中的任何两个数加起来都是质数。

题解:

无视掉1的话,我们最多选择一个奇数和一个偶数,因为奇数+奇数=偶数,偶数加偶数=偶数
所以直接暴力枚举就好了。
另外这道题如果建边的话,跑dfs直接莽一波最大团也可以……

我是一个智障,我就跑了最大团 QAQ

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int pri[2000005];
bool flag[maxn], a[maxn][maxn];
int ans, cnt[maxn], group[maxn], n, vis[maxn];
// 最大团: V中取K个顶点,两点间相互连接
// 最大独立集: V中取K个顶点,两点间不连接
// 最大团数量 = 补图中最大独立集数bool dfs( int u, int pos ){int i, j;for( i = u+1; i <= n; i++){if( cnt[i]+pos <= ans ) return 0;if( a[u][i] ){// 与目前团中元素比较,取 Non-N(i)for( j = 0; j < pos; j++ ) if( !a[i][ vis[j] ] ) break;if( j == pos ){     // 若为空,则皆与 i 相邻,则此时将i加入到 最大团中vis[pos] = i;if( dfs( i, pos+1 ) ) return 1;}}}if( pos > ans ){for( i = 0; i < pos; i++ )group[i] = vis[i]; // 最大团 元素ans = pos;return 1;}return 0;
}
void maxclique()
{ans=-1;for(int i=n;i>0;i--){vis[0]=i;dfs(i,1);cnt[i]=ans;}
}
void pre()
{pri[1]=1;pri[0]=1;for(int i=2;i<2000005;i++){if(pri[i])continue;for(int j=i+i;j<2000005;j+=i)pri[j]=1;}
}
int aa[maxn];
int main()
{pre();scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&aa[i]);for(int i=1;i<=n;i++)for(int j=1;j<i;j++)if(!pri[aa[i]+aa[j]])a[i][j]=1,a[j][i]=1;maxclique();cout<<ans<<endl;for(int i=0;i<ans;i++)cout<<aa[group[i]]<<" ";cout<<endl;
}

转载于:https://www.cnblogs.com/qscqesze/p/5419069.html

Educational Codeforces Round 12 D. Simple Subset 最大团相关推荐

  1. Educational Codeforces Round 12 C. Simple Strings 贪心

    C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves si ...

  2. Educational Codeforces Round 12 A. Buses Between Cities 水题

    A. Buses Between Cities 题目连接: http://www.codeforces.com/contest/665/problem/A Description Buses run ...

  3. Educational Codeforces Round 12 B. Shopping 暴力

    B. Shopping 题目连接: http://www.codeforces.com/contest/665/problem/B Description Ayush is a cashier at ...

  4. 双联通分量求简单环(Educational Codeforces Round 42: F. Simple Cycles Edges)

    题意: n个点m条边的无向图,问有哪些边在一个简单环上,按顺序输出这些边的编号 思路: 对于无向图求出每个双联通分量,对于每个双联通分量,如果点的个数==边的个数,那么这个双联通分量就是个简单环,输出 ...

  5. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  6. Educational Codeforces Round 32

    http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...

  7. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  8. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  9. Educational Codeforces Round 104 (Rated for Div. 2)A~E解题报告

    Educational Codeforces Round 104 (Rated for Div. 2) A. Arena \quad原题链接 http://codeforces.com/contest ...

最新文章

  1. 在执行ab压力测试时出现socket: Too many open files (24)的解决方法
  2. 每日一皮:你们都是怎么解压的?
  3. 时间选择控件在不同场景下的应用
  4. MySql 自适应哈希索引
  5. [Python图像处理] 五.图像融合、加法运算及图像类型转换
  6. 关于HTML的面试题-html4/css2篇
  7. VC6编译卡死之解决办法
  8. 计算机科学与技术班级口号八字,班级的八字口号
  9. idea shell 使用linux_Linux使用shell定时任务实现ffmpeg视频转码和截图
  10. Oracle 查看 表 存储过程 触发器 函数 等对象定义语句的方法
  11. SQL Server 将在下一个版本实现内存中运行
  12. 6. 卷2(进程间通信)---System V 消息队列
  13. html5 dom 结构,HTML5 DOM扩展
  14. mac 10.9 安装 mysql_mac 下安装 mysql (蛋疼)
  15. Android oem 解锁
  16. 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
  17. UVALive 6436 The Busiest City
  18. 注解处理器(Annoation Processor)
  19. react,tsx中使用微信jssdk分享总结
  20. 关系与关系模式的区别——易懂

热门文章

  1. 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0/Ubuntu
  2. muduo之GzipFile
  3. 开发相关手册、STM32各种库文件、相关软件、工具连接等(不断更新)
  4. Arduino编程之Serial.println()和Serial.print()
  5. 4.STM32中对USART1_Config()函数的理解(自定义)
  6. 不同位数编译器下的基本数据类型所占的字节数(字节大小):
  7. main 函数内的变量是全局变量,还是局部变量?
  8. python六十: __doc__属性
  9. python二十二:迭代,三元表达式,列表解析
  10. java操作ad域 免证书