NOIP2017普及组 赛前总结

此文写于2017年11月11日。
今天是双十一购物节,也是NOIP2017的普及组复赛。
想想过去一年里,我从“Hello ,World!”转变到算法与图论–>
BUT
今天就是NOIP:o(>﹏<)o不要啊

NOIP分析

NOIP的第一题一般是什么模拟啊,基本不会用到什么算法,如果要用算法也是用贪心枚举之类的简单算法。
NOIP的第二三四题难度不一定,所以要先读完所有题

算法基本概念

枚举

其实这个也没什么好说的,就是暴力枚举。
如果能减少循环次数更好。

递归

递归的话吧,主要是找清楚变量的关系,怎么发生的变化,以及变化成什么样。
次数比较多,可能会T,下面搜索时还会再讲。

分治

分治,故名思意,就是分开来算的意思。
切成两半就是二分,有时也可能切成四半或更多。

搜索

搜索呢有分深搜(dfs)和广搜(bfs)。
神搜就是一直往下搜索,直到找到为止。如果找不到,就回溯。一般要用到递归和记忆化。
广搜呢就是先不深入,把所有都搜索一遍。

动态规划

动态规划(DP)的题都可以用记忆化深搜来做,只不过记忆化深搜有时写起来很麻烦。而动归的代码比较简短,但是需要一些思维上的突破。

算法实现

枚举

这是一道经典枚举题:点我查看
如果要找出某个数是另一个数的两倍,我们只需要一一枚举就好了,在枚举的过程中,要避免重复运算,思想很简单,这就是枚举题。

#include<cstdio>
int main()
{
    int i,a[15],x,n=0,j,sum=0;
    while(scanf("%d",&x)==1)
        a[n++]=x;
    for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
            if(a[i]*2==a[j]||a[j]*2==a[i])
                sum++;
    printf("%d",sum);
    return 0;
}

递归

递归题目:戳我
我们知道,一次只能上一阶或两阶,则

    if(n==1) return 1;
    if(n==2) return 2;
    return f(n-1)+f(n-2);

这就是f函数内部,在里面进行递归,然后达成最后的目的
如上是递归思想

#include<cstdio>
int f(int n)
{
    if(n==1) return 1;
    if(n==2) return 2;
    return f(n-1)+f(n-2);
}
int main()
{
    int n,i;
    while(scanf("%d",&n)!=EOF)
        printf("%d\n",f(n));
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值