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 最长上升子序列

  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/l999q/p/9356915.html
Copyright © 2011-2022 走看看