信息学奥赛一本通 1919:【02NOIP普及组】选数 | 洛谷 P1036 [NOIP2002 普及组] 选数
【题目链接】
ybt 1919:【02NOIP普及组】选数
洛谷 P1036 [NOIP2002 普及组] 选数
【题目考点】
1.排列组合
2.深搜(子集树)
3.质数
【解题思路】
深搜(子集树),每次确定要不要选择某个数字。选择该数字,则加和增加,然后看下一个数字。不选择,则直接看下一个数字。如果选择的数字个数达到k个,那么看加和是不是质数,如果是,计数加1。最后输出计数。
看数据范围k,n都小于等于20,从n个数中找k个数的组合数CnkC_n^kCnk最大值为C2010=184756C_{20}^{10}=184756C2010=184756,可以通过深搜搜索所有可能的组合看加和为质数有多少种情况。
如果直接判断一个数是否是质数,复杂度为O(x)O(\sqrt{x})O(x),x为待判断的数字。x的最大可以是101010个5∗1065*10^65∗106相加即5∗1075*10^75∗107,5∗107≈7∗103\sqrt{5*10^7}\approx7*10^35∗107≈7∗103这个数再乘以184756,结果接近10910^9109。
以上只是对时间复杂度最坏情况的理论上的分析,实际每次判断质数多数情况下不会循环O(x)O(\sqrt{x})O(x)次,应该不会超时,实际也没有超时。
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
#define N 25
int n, k, x[N], sum, ct;//sum:加和
bool isPrime(int n)//判断n是不是质数
{for(int i = 2; i <= sqrt(n); ++i){if(n % i == 0)return false;}return true;
}
//看要不要选择第i个数字,现在还需要选择m个数字(深搜子集树)
void dfs(int i, int m)
{if(m == 0)//找到解,已经选择了k个数字 {if(isPrime(sum))//如果num是质数 ct++;//计数加1 return;}if(n-i+1 < m)//剪枝 若 剩余的数字个数 小于 要选择的数字个数 就退出 return;dfs(i+1, m);//第i数字不加入sum += x[i];//状态更新 dfs(i+1, m-1);//第i数字加入sum -= x[i];//状态还原
}
int main()
{cin >> n >> k;for(int i = 1; i <= n; ++i)cin >> x[i];dfs(1, k);cout << ct;return 0;
}
信息学奥赛一本通 1919:【02NOIP普及组】选数 | 洛谷 P1036 [NOIP2002 普及组] 选数相关推荐
- 信息学奥赛一本通 1392:繁忙的都市(city) | 洛谷 P2330 [SCOI2005]繁忙的都市
[题目链接] ybt 1392:繁忙的都市(city) 洛谷 P2330 [SCOI2005]繁忙的都市 [题目考点] 1. 图论 最小生成树 [解题思路] 将题目叙述转为图论概念,交叉路口为顶点,道 ...
- 洛谷 P1036 [NOIP2002 普及组] 选数(DFS)
题目描述 已知 n 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1,x2,-,xn,以及1个整数k(k<nk<nk<n).从n个整数中任选k个整数相加,可分别得到一 ...
- 洛谷----P1036 [NOIP2002 普及组] 选数
题目描述 已知 nn 个整数 x1,x2,⋯,xn,以及 1 个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 ...
- 信息学奥赛一本通 1375:骑马修栅栏(fence) | 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences
[题目链接] ybt 1375:骑马修栅栏(fence) 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences [题目考点] 1. 图论:欧拉回路 欧拉回路存在的条件: ...
- 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒
[题目链接] ybt 1314:[例3.6]过河卒(Noip2002) ybt 1921:[02NOIP普及组]过河卒 洛谷 P1002 [NOIP2002 普及组] 过河卒 [题目考点] 1. 坐标 ...
- 信息学奥赛一本通 ybt 1933:【05NOIP普及组】循环 | 洛谷 P1050 [NOIP2005 普及组] 循环
[题目链接] ybt 1933:[05NOIP普及组]循环 洛谷 P1050 [NOIP2005 普及组] 循环 [题目考点] 1.高精度 2.数学 [解题思路] 要求最后k位的循环长度,可以从低位向 ...
- 信息学奥赛一本通 1925:【03NOIP普及组】麦森数 | OpenJudge NOI 4.4 1708:麦森数 | 洛谷 P1045 [NOIP2003 普及组] 麦森数
[题目链接] ybt 1925:[03NOIP普及组]麦森数 OpenJudge NOI 4.4 1708:麦森数 洛谷 P1045 [NOIP2003 普及组] 麦森数 [题目考点] 1. 高精度 ...
- 信息学奥赛一本通 1937:【06NOIP普及组】数列 | 洛谷 P1062 [NOIP2006 普及组] 数列
[题目链接] ybt 1937:[06NOIP普及组]数列 洛谷 P1062 [NOIP2006 普及组] 数列 [题目考点] 1. 数制 [解题思路] 如果k为2,那么这个数列 第1项为202^02 ...
- 信息学奥赛一本通 1961:【13NOIP普及组】计数问题 | 洛谷 P1980 [NOIP2013 普及组] 计数问题
[题目链接] ybt 1961:[13NOIP普及组]计数问题 洛谷 P1980 [NOIP2013 普及组] 计数问题 [题目考点] 1. 数字拆分 [解题思路] 遍历1~n的各个数字,对每个数字做 ...
最新文章
- Intellij IDEA单元测试提示Test events were not received
- 【视频课】图像分割重磅上新-人像抠图(Matting)实战
- 允许跨域访问_PHP设置多域名允许跨域访问
- pythonの鉴黄之路(二)——图片转base64码
- webrtc后续补丁
- C语言 游戏远程call调用,创建远程线程 调用游戏所有call
- 从不同解码策略看机器如何生成文本
- Algorithm Set:floyd判环法
- 【线程安全】—— 单例类双重检查加锁(double-checked locking)
- 微服务架构实战:Swagger规范RESTful API
- Python3安装Crypto模块
- 网页上嵌入Flash播放器(2)
- 下行法求最小割集案例_最小割集求法.docx
- Android中获取视频的第一帧图片的三种方法
- rabbitmq 从channal获得socket
- apche的log4j.properties和log4j2.xml的配置和使用
- 【Centos】Docker停止容器服务后,磁盘I/O仍然迟迟不下降。(未解决)
- VMware配置虚拟机映射,实现局域网络互相访问
- 国产加速度传感器QMA6100P
- 简单实现点击图片放大的功能