zoukankan      html  css  js  c++  java
  • ACM北大暑期课培训第一天

      今天是ACM北大暑期课开课的第一天,很幸运能参加这次暑期课,接下来的几天我将会每天写博客来总结我每天所学的内容。好吧下面开始进入正题:

      今天第一节课,郭炜老师给我们讲了二分分治贪心和动态规划。

      1.二分主要讲了两个函数:binary_search 和 lower_bound

        binary_search  在包含size个元素的、从小到大排序的int数组a里查找元素 p,如果找到,则返回元素下标,如果找不到,则返回-1。

        lower_bound    在包含size个元素的、从小到大排序的int数组a里查找比给 定整数p小的,下标最大的元素。找到则返回其下标,找不到则返回-1。

      PS :为了防止 (L+R)过大溢出:  int mid = L+(R-L)/2;

      还讲了二分法求方程的根 

      

    ///求方程   x*x*x - 5*x*x + 10*x - 80 的一个根a
    ///已知 f(0) < 0 ; f(100) > 0
    ///要求|f(a)|<=1e-6
    #include <stdio.h>
    #include <math.h>
    double EPS = 1e-6;
    double f(double x)
    {
        return x*x*x - 5*x*x + 10*x - 80;
    }
    int main()
    {
        double root, x1 = 0, x2 = 100,y;
        root = x1+(x2-x1)/2;
        y = f(root);
        while( fabs(y) > EPS)
        {
            if( y > 0 ) x2 = root;
            else x1 = root;
            root = x1+(x2 - x1)/2;
            y = f(root);
        }
        printf("该方程的一个根为:%.8f
    ",root);
        return 0;
    }
    二分法求方程的根(举例)

    例题:POJ 2456 Aggressive cows

    PS:最小值最大这类问题 ,先考虑二分是否可行 ,如果可行首选二分

      2.分治   其基本概念为:把一个任务,分成形式和原任务相同,但规模更小的 几个部分任务(通常是两个部分),分别完成,或只 需要选一部完成。然后再处理完成后的这一个或几个 部分的结果,实现整个任务的完成。

      其典型应用为:归并排序和快速排序。

    例题:1.输入n个数输出前m大的数

       2.求逆序数

       3.分假币

      3.贪心   每一步行动总是按某种指标选取最优的操作来进行, 该指标只看眼前,并不考虑以后可能造成的影响。 贪心算法需要证明其正确性。

    例题:1. OpenJ_Bailian 4110 圣诞老人的礼物-Santa Clau’s Gifts

         2.OpenJ_Bailian 4151 电影节

         3.POJ 3190 Stall Reservations

         4.POJ 1328 Radar Installation

      4.动态规划       

      动规解题的一般思路:

      1. 将原问题分解为子问题

      2. 确定状态(整个问题的时间复杂度是状态数目乘以计算每个状态所需 时间。)

      3. 确定一些初始状态(边界状态)的值

      4. 确定状态转移方程

      能用动规解决的问题的特点

      1) 问题具有最优子结构性质。

      2) 无后效性。(当前的若干个状态值一旦确定,则此后过程 的演变就只和这若干个状态的值有关,和之前是采取哪 种手段或经过哪条路径演变到当前的这若干个状态,没 有关系。)

      解题思路:

      1.找子问题

      2. 确定状态

      3. 找出状态转移方程:

      动规的三种形式:

      1)记忆递归型

      2) “我为人人”递推型

      3) “人人为我”递推型(用的较多)

    例题:1.POJ 1163 The Triangle 

         2.OpenJ_Bailian 2757 最长上升子序列

  • 相关阅读:
    Kotlin系列之序列(Sequences)源码完全解析
    JVM不稳定参数
    akka共享内存
    内存占用过高 kill 调整mysql内存占用
    系统级监控
    linux环境变量
    进程启动,崩溃异常日志++++
    JVM致命错误日志(hs_err_pid.log)分析
    批处理之坑爹的感叹号和变量延迟扩展
    kafka消费端
  • 原文地址:https://www.cnblogs.com/l999q/p/9356915.html
Copyright © 2011-2022 走看看