题目描述

数据范围

解法

由于大于4的素数只有可能由奇数和偶数的和得出。

所以根据数的奇偶性可以分出两类数奇数和偶数。

奇数之间不会相互匹配,偶数之间也不会相互匹配。

那么原问题转化为二分图最大匹配。

网络流即可。

代码

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm> using namespace std;
const char* fin="prime.in";
const char* fout="prime.out";
const int inf=0x7fffffff;
const int maxn=207,maxa=2007;
int n,i,j,k,ans=0,en,ls,rs;
int a[maxn],c[maxa];
int b[maxn];
int tot=1,fi[maxn],la[maxa],va[maxa],ne[maxa],cnt[maxn],bz[maxn];
int gg(int x){
return 1+x;
}
void add_line(int a,int b,int c){
tot++;
ne[tot]=fi[a];
la[tot]=b;
va[tot]=c;
fi[a]=tot;
}
void add(int a,int b){
add_line(a,b,1);
add_line(b,a,0);
}
int gap(int v,int flow){
int i,use=0,k;
if (v==en) return flow;
for (k=fi[v];k;k=ne[k])
if (bz[v]==bz[la[k]]+1 && va[k]){
i=gap(la[k],min(flow-use,va[k]));
use+=i;
va[k]-=i;
va[k^1]+=i;
if (use==flow || bz[1]==en) return use;
}
if (!--cnt[bz[v]]) bz[1]=en;
cnt[++bz[v]]++;
return use;
}
bool p[maxa];
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
for (i=2;i<maxa;i++){
if (!p[i]) c[++c[0]]=i;
for (j=1;j<=c[0];j++){
if (i*c[j]>=maxa) break;
p[i*c[j]]=true;
if (i%c[j]==0) break;
}
}
scanf("%d",&n);
en=2+n;
for (i=1;i<=n;i++){
scanf("%d",&a[i]);
if (a[i]%2) add(1,gg(i));
else add(gg(i),en);
}
for (i=1;i<=n;i++) for (j=1;j<=n;j++)
if (a[i]%2==1 && a[j]%2==0 && !p[a[i]+a[j]]) add(gg(i),gg(j));
cnt[0]=en;
while (bz[1]<en) ans+=gap(1,inf);
printf("%d",ans);
return 0;
}

启发

原本的想法就是网络流,但发现一次匹配会用去两个数的使用次数。

并没有注意到大于四的素数只能由偶数和奇数的和得到这个性质。

两两匹配问题考虑把原数集分为两个独立集。


这道题似乎还可以贪心,脑洞较小无法想出。

想点办法打开脑洞。

最新文章

  1. Android面试技巧 找安卓开发工作同学可以看看!
  2. javabean连数据库
  3. 无需Try catch 的UI事件封装类
  4. [Notes] Timer Comparision when turn influence computing on/off
  5. [转载]DBA的特质第二部分:性格
  6. MakeCode 递归生成资源文件
  7. 转载自安卓巴士 【收藏】2015必须推荐的Android框架,猿必读系列!
  8. centos 编译 安装 protobuf
  9. Asp.Net MVC开源论坛中文版
  10. spark-submit提示资源不足
  11. http://www.cnblogs.com/xdp-gacl/p/4040019.html
  12. jQuery插件开发方法
  13. BNUOJ 34981 A Matrix
  14. CountDownLatch使用详解
  15. C#之委托(函数参数传递)【转】
  16. loj6074 子序列
  17. LVS负载均衡集群
  18. python内置函数 和模块函数总结
  19. ORA-28002:the password will expire within 6 days
  20. 我眼中的正则化(Regularization)

热门文章

  1. js 中直接调用和new的区别
  2. 2019-8-31-dotnet-控制台读写-Sqlite-提示-no-such-table-找不到文件
  3. UVA11107 Life Forms SA模板
  4. 跟我一起做一个vue的小项目(三)
  5. ThinkPHP实现导出Excel表格
  6. 使用innerHTML属性向head中插入字符时报“无法设置 innerHTML 属性。 该操作的目标元件无效”的错误
  7. 【solr】Solr5.5.4单机部署
  8. maven安装教程(Idea)
  9. HTML5属性
  10. 2019.8.5 NOIP模拟测试13 反思总结【已更新完毕】