OJ中-----素数伴侣(二分图,匈牙利算法)*?
来源:互联网 发布:linux 查看显存占用 编辑:程序博客网 时间:2024/05/19 08:40
题目描述若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
输入:
有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
输出:
输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
输入说明
1 输入一个正偶数n
2 输入n个整数
求得的“最佳方案”组成“素数伴侣”的对数。
方法一:全排列出所有情况 prev_permutation
方法二:二分图匈牙利算法,能进行匹配的一定是 一个奇数,一个偶数,因此先将输入的数进行分类,在进行匹配。
方法一实现:测试:6 24 21 19 20 24 17 答案是3, (1)24-17 (2)21-20(3)19-24
# include <iostream>#include<cstring>#include <algorithm>using namespace std;bool issushu(int, int);int main(){int n;int max = 0;cin >> n;int a[100] ;for (int i = 0; i < n;i++){cin >> a[i];}//sort(a,a+n);do{int sum = 0;for (int k = 0; k < n;k+=2){if (issushu(a[k], a[k + 1])){ sum++; }}max = max>sum ? max : sum;} while (prev_permutation(a, a + n));cout << max << endl;system("pause");}bool issushu(int m,int n){bool bl = true;if (m + n < 2){ return false; }for (int i = 2; i*i <= (m + n);i++){if ((m + n) % i == 0){ bl = false; }}return bl;}
方法二:二分图的最优匹配
0 0
- OJ中-----素数伴侣(二分图,匈牙利算法)*?
- 牛客网 素数伴侣(二分图最大匹配,匈牙利算法)
- 华为oj之素数伴侣---匈牙利算法
- 华为OJ之素数伴侣-匈牙利算法
- 素数伴侣 匈牙利算法
- 华为oj素数伴侣,利用匈牙利算法求解
- 华为OJ(素数伴侣)
- 华为oj素数伴侣
- 二分图(匈牙利算法)
- 【华为OJ】【074-素数伴侣】
- 华为oj中级 素数伴侣
- 二分图匈牙利算法
- 二分图匈牙利算法
- 二分图 匈牙利算法
- 匈牙利算法 二分图
- 二分图 匈牙利算法
- 二分图---匈牙利算法
- 二分图 匈牙利算法
- hdu oj 题目分类
- 程序员感悟
- Rational Rose
- python队列queue模块详解
- php 一句话木马、后门
- OJ中-----素数伴侣(二分图,匈牙利算法)*?
- ANdroid 代码中设置与布局文件一样的dp高度的引用方法
- UVALive 6624 - Card Trick - 概率dp
- 值类型和引用类型的存储
- BZOJ 1143 [CTSC2008]祭祀river
- android binder机制详细解析
- poj题目分类
- Android 6.0 运行时权限处理
- uva 10271 dp