• 清北学堂(2019 4 28 ) part 1


    今天主要用来铺路,打基础

    枚举

    没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路:

    1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优

    2.先枚举质数再判断回文,但质数显然要比回文数要多,较下一种慢

    3.先枚举回文数再判质:

      (1).分别开数组,把每个元素当做一位数,如w[1]表示个位,w[2]表示十位等,如果能构成回文,再判质

      (2).枚举最大数位数的一半,即分析1-600000之中的数只需枚举后三位,将后三位翻转形成回文数,再判质,显然更优

    洛谷原题,用的3-(1),其实效果与1相仿,就是少判断几次,很快ac了,显然数据很水

    搜索

    这个真的没有整的必要,毕竟最近学了,最近也整理过了(只会打模板QAQ)

    贪心

    贪心是一类思路的总称,其实没有像动态规划,深搜广搜,dijkstra一样的公式,只是指这类题可以根据局部最优,推出全局最优

    大佬曰:“贪心难的不是算法思路,而是如何证明这个算法思路是对的”

    就像几何证明题,你看它垂直,就是证不出来

    贪心主要思路:

    1.列些好像是对的的关系式,越多越好,当然如果直接有正确思路可以直接敲代码了。。。

    2.对于以上思路、关系式,尽力举反例,卡掉越多思路剩下的正确率越高,除非你把自己的思路全部卡掉,对于这种情况,提供两种方案:

      (1).放弃此题

      (2).取样例过得多的算法,骗更多的分

    其实贪心需要刷题来养成形成最优方案的思维

    二分

    讲过,但具体并没进行过代码实现过,今天简单练了下

    粘个代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n;         //数据总个数
    int target;    //查询目标
    int l,r,mid;
    int a[50005];
    priority_queue<int,vector<int>,greater<int> > q; //用优先队列排序,不用sort
    int main(){
        scanf("%d%d",&n,&target);
        for(int i=1;i<=n;i++){
            int x;
            scanf("%d",&x);
            q.push(x);
        }
        for(int i=1;i<=n;i++){
            a[i]=q.top();
            q.pop();
        }
        for(int i=1;i<=n;i++)printf("%d ",a[i]);
        puts(""); //好像puts比printf和cout快的多,就像getchar与scanf与cin
        l=1;
        r=n;
        while(l<=r){  //二分主体
            mid=(l+r)>>1;
            if(a[mid]==target){
                printf("%d
    ",mid);
                return 0;
            }
            if(a[mid]>target)
                r=mid-1;  //必须作加减处理,不然卡死循环
            else if(a[mid]<target)
                l=mid+1;
        }
        printf("Why did u say that number?
    "); //蝙蝠侠老梗(无解情况)
        return 0;
    }

    分治

    好像就是递归??

    用分治做出来过“幂次方”(题目传送门)

    (博客传送门)

    当时觉得自己a了道递归题好厉害。。。完全不知道这是分治

  • 相关阅读:
    MVC3 中上传大文件
    js 将十进制转换为八位二进制数组
    nodejs 读取并处理二进制文件
    freeswitch源码编译 ./configure 遇到的问题
    通道设置静态坐席
    呼叫中心静态座席的配置
    ECharts报表
    combotree
    openlayer PanZoom
    为什么要始终使用PreparedStatement代替Statement?
  • 原文地址:https://www.cnblogs.com/648-233/p/10786208.html
Copyright © 2020-2023  润新知