当我们看到这道题的时候,我们不仅大吼一声,这不就是搜索嘛。

于是搜索两大刀!搜索目标和搜索状态!

搜索目标:求选数的方案,以及他们的和是否为质数。

搜索状态:

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的更多相关文章

随机推荐

  1. PHP下载远程图片到本地的几种方法总结(tp5.1)

    1.CURL 2.使用file_get_contents 3.使用fopen 参考链接:https://www.jb51.net/article/110615.htm

  2. c语言 判断字符串长度 实现

    /* 首先明白答案的本质(该函数)是一个计数器该计数器用for循环来实现实现对一串字符串的计数字符串以空格开头 不计算空格 计算空格后的数字直到遇到\0结束.num计算器字符串不以空格结束 计算空格后 ...

  3. Oracle Round 函式 (四捨五入)

    Oracle Round 函式 (四捨五入)描述 : 傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果.SELECT ROUND( number, [ decimal_places ] ...

  4. python 递归-汉诺塔

    # 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print(& ...

  5. JS中的逻辑运算符&&、||

    原文:JS中的逻辑运算符&&.|| 1.JS中的||符号: 运算方法: 只要"||"前面为false,不管"||"后面是true还是false, ...

  6. python class 中__next__用法

    class A(): def __init__(self,b): self.b=b # def __iter__(self): # 这个函数可以用,表示迭代标志,但也可以省略 # return sel ...

  7. 【转】Dubbo分布式服务框架

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的远程服务调用方案. Dubbo架构 官网架构图: 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务 ...

  8. 面试总结之Data Science

    数据科学家面试如何准备? https://mp.weixin.qq.com/s/uFJ58az8WRyaXT2nibK02g 2020 年算法 / 数据分析面试数学考点梳理 https://mp.we ...

  9. 英语DIAMAUND钻石指坚硬不可侵犯的物质

    首先谈谈钻石和金刚石的名称.金刚石是一种天然矿物,是钻石的原石.习惯上人们常将加工过的金刚石称为钻石,而未加工过的称为金刚石(当然,有的金刚石不用加工便可应用).钻石是那些达到宝石级别的金刚石晶体切磨 ...

  10. 魅族手机使用应用沙盒一键修改imsi数据

    较早前文章介绍了怎么在安卓手机上安装激活XPosed框架,XPosed框架的牛逼之处功能各位都介绍过,可以不修改apk的前提下,修改系统内核的参数,打比方在某些应用领域,各位需要修改手机的某个系统参数 ...