洛古P1036 选数 题解
[我是传送门]
这是一道很经典的深搜与回溯(难度一般)
可是就这个"普及-"
让本蒟蒻做了一晚上+半个上午(实际我不会深搜回溯,全靠框架+去重);
下面让我分享下本蒟蒻的(全排列+暴搜去重)
#include<bits/stdc++.h>
using namespace std;
int n,r,ttt;//n是总数,r是选的数,ttt是答案
int a[],b2[],c[][];//a用来储存排列的编号,b2用来储存输入的数,c用来去重(储存符合条件的数组的编号)
bool b[];//用来判断是否用过
bool ss2(int t[]){//暴搜判重
int tot=;//计数器
for(int i=;i<=ttt;i++){//循环所有储存的数组
for(int j=;j<=r;j++){//循环r次,比较每一个字符
if(t[j] != c[i][j])//判重
tot++;
}
if(tot==)//如果没有一个不一样的说明重复
return ;
tot=;//一定要清空!!!!
}
return ;//如果全不重复,说明不重
}
bool sus(int y){//判断素数
if(y==||y==)//防止特殊值
return ;
if(y==)
return ;
for(int i=;i<=sqrt(y);i++){//循环到sqrt就够了
if(y%i==)
return ;
}
return ;
}
void print(){//其实不能叫print,因为没有输出 int y=;
int b3[r+];//定义新数组避免动原先(a)数组
for(int i=;i<=r;i++)//判断素数
y+=b2[a[i]];
if(sus(y)==){//不是素数直接跳过
for(int i=;i<=r;i++)
b3[i]=a[i];
sort(b3+,b3+r+);//一定要排序,因为类似"组合"
if(ss2(b3)==){//如果不重复
u++;//这一步可以不要
ttt++;//答案加1
for(int i=;i<=r;i++)
c[u][i]=b3[i] ;//如果不要u++这里u要换成ttt
} } }
void ss(int k){//程序主体
for(int i=;i<=n;i++){
if(b[i] ==){//只要没标记过就能用
a[k]=i;//记录编号
b[i]=;//标记
if(k==r) print();//到了r"输出"
else ss(k+);//否则继续
b[i]=;//回溯
}
}
}
int main(){
cin>>n>>r;//输入
for(int i=;i<=n;i++)
cin>>b2[i];
ss();//深搜
cout<<ttt;//输出答案
return ;
}
洛古P1036 选数 题解的更多相关文章
- 洛谷P1036 选数 题解 简单搜索/简单状态压缩枚举
题目链接:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,-,x_n\) ,以及 \(1\) 个整数 \(k(k& ...
- 【搜索】【入门】洛谷P1036 选数
题目描述 已知 n个整数x1,x2,…,xn,以及1个整数k(k<n).从nn个整数中任选kk个整数相加,可分别得到一系列的和. 例如当n=4,k=3,4个整数分别为3,7,12,19时, ...
- P1036 选数 题解
题目链接https://www.luogu.org/problemnew/show/P1036 题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1,x2,-,xn ...
- 洛谷 P1036 选数
嗯.... 这种类型的题在新手村出现还是比较正常的, 但是不知道为什么它的分类竟然是过程函数与递归!!!(难道这不是一个深搜题吗??? 好吧这就是一道深搜题,所以千万别被误导... 先看一下题目: 题 ...
- (水题)洛谷 - P1036 - 选数
https://www.luogu.org/problemnew/show/P1036 $n$ 才20的数据量,我当时居然还在想怎么分组组合,直接 $2^{20}$ 暴力搞就行了. $x_i $太大了 ...
- 洛谷P1036选数(素数+组合数)
题目链接:https://www.luogu.org/problemnew/show/P1036 主要考两个知识点:判断一个数是否为素数.从n个数中选出m个数的组合 判断一个数是否为素数: 素数一定是 ...
- 洛谷——P1036 选数
题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...
- 【洛谷P1036 选数】
这个题显然用到了深搜的内容 让我们跟着代码找思路 #include<bits/stdc++.h>//万能头 ],ans; inline bool prime(int n)//最简单的判定素 ...
- 洛谷 P1036 选数【背包型DFS/选or不选】
题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...
随机推荐
- 安装mysql8.0出现服务无法启动,服务没报告任何错误
改为net start mysql80 参考https://blog.csdn.net/gzejia/article/details/82156994
- 启动jar的方式
1.windows server 2008 start "srvRegistry" java -jar srvRegistry-1.0-SNAPSHOT.jar --spring. ...
- pandas常用函数之diff
diff函数是用来将数据进行某种移动之后与原数据进行比较得出的差异数据,举个例子,现在有一个DataFrame类型的数据df,如下: index value1 A 0 B 1 C 2 D 3 如果执行 ...
- windows上编译zlib-1.2.8
MSVC编译 使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库) zdll.lib(动态库的 ...
- VMWare的host-only/bridged/NAT连接图文介绍
1 VMware简介 VMWare虚拟机软件是一个“虚拟PC”软件,它使我们可以在一台机器上同时运行二个或更多Windows.Linux等系统. 如果我们需要使用多个系统的话,传统的方式有两种: .使 ...
- flyway和liquibase的使用样例
在代码上我们有svn和git等诸多的版本控制方法. 但是在数据库上却没有相应的工具.一度导致多环境见的数据库同步难以维持. flyway和liquibase都是常见的数据库版本控制工具. flyway ...
- webapp中绝对定位/固定定位与虚拟键盘冲突的问题
$('body,html').height(document.body.clientHeight); 进入页面的时候就把高度固定住,这样虚拟键盘打开页面高度不会变化,你的布局也不会乱. 测试有效. 当 ...
- spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))
MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...
- 第29月第2天 charles
1. https://www.jianshu.com/p/55a8c84e0f24
- 第四节,目标检测---YOLO系列
1.R-CNN回顾 适应全卷积化CNN结构,提出全卷积化设计 共享ResNet的所有卷积层 引入变换敏感性(Translation variance) 位置敏感分值图(Position-sensiti ...