LG1036
当我们看到这道题的时候,我们不仅大吼一声,这不就是搜索嘛。
于是搜索两大刀!搜索目标和搜索状态!
搜索目标:求选数的方案,以及他们的和是否为质数。
搜索状态:
1.从后往前分析目标(或从前往后):和是否为质数,很明显我们可以设计一个参数代表当前选数的和i,至于是否为质数的特判肯定就放到了函数里面了。但是你要注意和要为质数是在题目中对应的几个数相加才可以的来的,所以我们要设计一个参数来确定你选了几个数j,其实和,这个和是对应的。至于选数的方案,其实我们并不在意咋选的,我们需要一个参数能够,明确彰显搜索的每一步状态的,所以说我之前写过状态的设计需要,明确搜索步骤,或者说,准确得描述搜索步骤。当然根据我的感觉,一般用序数的东西比较好。比如这里人家设计的是k,代表你遍历到了第几个数。
综上,状态为(i,j,k),i代表你遍历到了第几个数;j代表你之前选的数的和;k代表你之前选了几个数。
但是人家的dfs中还有两部分,一部分是边界性问题,比如题目中给你4个数让你选,而你都选到了5个数,那显然不可能,那可能嘛》所以你这个时候就得return .
另一个部分是,设计下一步问题,其实这个感觉也是因题意而变。
分成(x+1,y,z)和
(x+1,y+a[x],z+1),这个就是两步,你遍历必须要经历的步骤,要么选,要么不选。
至于我觉得对我来说比较大的问题就是,关于这个质数的筛选,
我之前是这样写的
int isprime(int x)
{
if(x==) return -;
if(x==) return ;
int k=x;
int j=pow(k,/)+;
for(int i=;i<=j;i++) {
if(k%i==) return -;
} return ; }
但是只过了一半的点,然后根据下载的错误数据,我发现了问题在于质数的筛选上,于是我换了一个筛选质数的方法
int isprime(int x)
{
~~~
int k=x;
//大部分跟上一个一样
for(int i=2;i<=k;i++)
{
if(k%i==0) return -1; }
return 1 }
简单说我就是全枚举了一遍,然而上一个测试数据过了,但是还有几个都没过!比之前第一次过的还少!
没办法,看了别人的题解,发现了一种新的质数筛选的方法
int isprime(int x)
{ //其他都差不多,关键在于循环判断的条件上)
for(int i=;i*i<=x;i++)
****
}
然后这个就全过了。。。我也是。。。
不是很理解。
在我敲代码的时候,我必须得说,你没有考虑数据范围这个问题,因为人家之前给你提示了,
所以在思考题的时候一定要思考问题,防止报数据!
又出现了全局变量的问题。。。思考不全面,重新打一遍,
所以说最靠谱的是先在脑子里一遍过好。。
同时又出现了函数先后调用,定义函数顺序的问题。
所以再敲一遍给我的启示是,
1,考虑数据范围
2,考虑函数定义的先后顺序。
3,写代码前把东西都想好。
4,再敲一遍,一遍过。
5,至少这里要多定义全局变量。
6,注意每写一个模块,都要检查一下。
最后写完的时候,再检查所有。
LG1036的更多相关文章
随机推荐
- day19——包、logging日志
day19 包 文件夹下具有______init______.py文件就是一个包 方法 import 包.包.包 from 包.包.包 import 模块 需要在______init______.py ...
- Go内存分配器可视化指南【译】【精】
当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂.一切看起来都像一个神秘的黑盒子.因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥 ...
- ASP.NET SignalR 系列(三)之代码实现
说在前头: 因SignalR默认采用camel的编码规范,故前端调用后端的对象或者方法时,首字母均需要小写 创建集线器 创建完,文件中默认创建了一个不带参数Hello方法的示例,我们修改一下,带个参数 ...
- K-匿名算法研究
12月的最后几天,研究了下k匿名算法,在这里总结下. 提出背景 Internet 技术.大容量存储技术的迅猛发 展以及数据共享范围的逐步扩大,数据的自动采集 和发布越来越频繁,信息共享较以前来得更为容 ...
- selenium自学笔记---下拉框定位元素select
下拉框1.先定位select 然后在定位option city = driver.find_element_by_id("selCities_0") city.find_eleme ...
- global position
观察, GestureDetector( child: CustomPaint(painter: StudyPaint(points: _points)), onPanEnd: (DragEndDet ...
- EasyPOI导入导出Excel
EasyPOI工具可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 导入maven依赖 <dependency> <group ...
- 直播知识-推流&拉流
推流,指的是把采集阶段封包好的内容传输到服务器的过程.其实就是将现场的视频信号传到网络的过程.“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是 ...
- JS 小工具 MYSQL WHERE IN条件 去掉换行符(列转行)
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- MySQL Replication--多线程复制MTS
多线程复制 多线程复制MTS(Mult-Threaded Slave Applier)指使用多个线程来并发应用二进制日志.在MYSQL5.6版本中,多线程复制基于schema来实现,将多个数据库下的事 ...