精华内容
下载资源
问答
  • 使用简单的二元一次方程组可以容易的解出答案: 假设有x只鸡,y只兔子; x + y = n; 1式 2x+4y = m; 2式 根据等式的基本原则:等式两边同乘以某一个非0的常数,等式仍然成立; 并且对于两个等式,左边的值...

    这是一道小学数学的问题。

    使用简单的二元一次方程组可以很容易的解出答案:

    假设有x只鸡,y只兔子;

    x + y = n;    1式

    2x+4y = m;  2式

    根据等式的基本原则:等式两边同乘以某一个非0的常数,等式仍然成立;

    并且对于两个等式,左边的值分别相加,右边的值分别相加,等式仍然成立; 

    2式 - 2*1式 ==》 2y = m-2n;

    ==》 可以推导出 y = (m-2n)/2;

    带回到1式 ==》 x=(4n-m)/2;

    从而可以用以下的Python代码来实现:

    def getChickRabbitNumber(n,m):

    """

    n=14,m=32 ==> x,y   12,2

    n=10,m=16 =x,y=> x,y  No solution

    """

    if n <= 0 or m <= 0 or m%2==1 or 4*n < m or m < 2*n: # 判决输入是否合法

         return None,None

         numberOfChick = (4*n-m)/2

         numberOfRabbit = (m-2*n)/2

    return numberOfChick,numberOfRabbit

    这是一个显而易见的一元二次方程的解法。

    但是由于问题本身的特殊性,每次我们需要对于一个实际的问题进行求解的过程。而这个n元一次方程组在求解时最容易想到的就是使用高斯消元的方法,当然,我们可以使用线性代数求解方程组的一整套方法论来解决这个问题。

    在计算机求解的过程中实际上也可以使用线性代数中的概念来得到更广泛意义上的方法。

    那么,上面这个解二元一次方程组的过程

    我们看下面更一般解法:

    def getChickRabbitNumber2(n,m):

    """

                a+b = n

               2a+4b = m

                get a,b

               n=14,m=32 ==> 12,2

               n=10,m=16 ==> No solution

     """

             # 一般解法:注意这里的一般是指不需要针对特殊问题采用特殊的函数方式,只需将这里的numpy数组替换即可推广

            A = np.array([[1,1],        #方程组 第一个方程的系数矩阵

                                 [2,4]])        #方程组 第二个方程的系数矩阵

            B = np.array([n,             #方程组 第一个方程右边的值

                                m])             #方程组 第二个方程右边的值

            x1,x2 = solve(A,B)         # 求解这个方程组

           if x1 < 0 or x2 < 0 or (int(x1) != x1) or (int(x2) != x2): # 判断解是否有意义

              return None,None

          return x1,x2

    这是使用Python中的numpy矩阵和内置的矩阵求解的方法来处理。

     

    方程的解可以是唯一的,可以是不存在的,也可以无穷多个(无穷多还有可能有不同的等级,因为无穷大也是有大小的。对,你没看错,无穷大有多种等级的!)

    我们这里的问题有其特殊性,方程的个数是2个,未知数的个数也是2个;

    如果我们让方程的个数为m个,未知数的个数为n个;则m,n之间的关系有:

    m < n, m = n, 和 m > n三种情况:

    通常来说           

                  当 m=n 时,方程会有唯一解;

                  当 m<n 时,方程可能有无穷多解;

                  但是,当有一个方程出现一侧为0,另一侧不为0时,则方程组出现矛盾,此时无解;

                  当 m>n时,方程的解个数是不确定的,各种可能性都有可能; 

     这m个方程,有可能有些可以通过其他方程组合能得到的,也就是说,它表达的真实信息可能在其他方程中已有所表达了,这样并不是一个有效的信息,此时m的真实值应该减少(以后我们会具体分析),但减少到什么程度就得看情况了;

    其实, 我们从几何直观上理解问题时,问题会显得更加的简单清晰。

    下面我们通过三个线性方程例子的求解过程及几何直观表现来展示一下解的多样性:

    当有唯一解的时候(事实上,这是一个苛刻的条件等式)

    举个例子:

            平面直角坐标系中有一个抛物线y = ax^2+bx+c,它过三个已知点(-3,20),(1,0),(2,10), 求这个抛物线方程。

    根据三点条件,我们得到下面的三个方程式:

    ### 线性方程组
    9a - 3b + c = 20
    a  + b  + c = 0
    4a + 2b + c = 10

    可以很容易的使用高斯消元得到这组方程组的解(我们这里先忽略解的过程,使用Python来做解方程的过程),我们可以解出它是唯一的:   a=3  b=1  c=-4

    # Python的求解代码如下:
    ## 先确定常数项
    A1 = [[9,-3,1],
             [1,1,1],
             [4,2,1]]
    A = np.array(A1)

    # 确定等式右边的值
    B = np.array([20,
                          0,
                         10])

    # 计算方程组的解
    c = solve(A,B)
    print(c)   # [ 3.  1. -4.]

    于是,抛物线方程为y = 3*x^2 + x -4

    我们可以把其抛物线图像画出

     

    其实唯一解在这里也是表达了三维空间中得一个点,我们知道,上面的三个方程其实每一个都表达了一个平面

    那么当这个三个方程都满足时,其实质上就是求空间中的这三个平面相交的部分,这里实际上是一个点(3,1,-4)!

    让我们来看看下面这张图,这是用Python的matplotlib做出的三个平面的相交部分图示:

     

    当 m < n时,方程则可能有无穷多解。

    这时,表达的可能就不是一个点,而是一条直线,或者一个平面,一个空间的概念。

    比如我们再来看一个例子:

    如解下面的线性方程组:
    9a - 3b + c = 20
    a  + b  + c = 0
    -a + 2b + c = -5

    ==》 数学的方法可以推导出如下解的关系
    #  x = t
    #  y = -5 + 2t
    #  z = 5  - 3t

    # 其中t是任意值,这里可以简单认为是实数;

    下面是Python解该方程组的代码:

    ## 先确定常数项
    A1 = [[9,-3,1],
             [1,1,1],
             [-1,2,1]]
    A = np.array(A1)
    ## 确定等式右边的值
    B = np.array([20,
                  0,
                  -5])

    # 计算方程组的解
    try:
        C = solve(A,B)
        print(C)             # 其中一组解 [ -6.5 -18.  24.5],(思考:为什么这里Python给出了这组解,有没有方法得到其他解???)
    except:
        print("Matrix is singular.")

    这里的t是可以自由变换的量,当t的值确定下来时,则y,z的值可以确定下来

    事实上,如果用空间坐标来刻画此时的图像,得到则是一个在x轴方向上可以无限延展的平面(x的值可以发生变换,y,z的值随着x的值发生变化),如下图:

    确实,我们发现线性代数的问题如果用这样的几何的方法来理解,

    用矩阵的代数方法来计算并没有想象的那么难。但事实上,用几何方法在未知数和方程超过三个的时候似乎也不好理解了,

    因为涉及到超平面了。但是,至少对于我们尝试去理解其直观本质还是有一定帮助。

     

    最后,我们再来看看无解的情况:

    请看下面的式子:

    ### 线性方程组
    x + y  = 2                 1式
    x - y  = 0                  2式
    x + 3y = 5                3式

    ==》 由1式,2式可以推出 x=1,y=1,但是带入3式矛盾;

    下面是Python解该方程组的代码
    ## 先确定常数项
    A1 = [[1, 1, 0],
          [1,-1, 0],
          [1, 3, 0]]
    A = np.array(A1)
     
    # 确定等式右边的值
    B = np.array([2,
                  0,
                  5])

    # 计算方程组的解
    try:
        c = solve(A,B)
        print(c)   # [ 3.  1. -4.]
    except:
        print("方程组无解.")

    通过几何意义,我们可以很容易看出来,

    这个方程组背后的含义是:

    欧几里得平面中的三条直线不相交,所以没有公共点(这点并不奇怪!)

    通过上面几个方程组的解及几何含义,我们直观了解了下方程组解的意义及在Python中解方程组的方法。

    总结:

           事实上未知数是一种不确定,方程是对未知数的限制,所以一般来说方程越多,空间中的点越少,因为限制越多

    关于线性代数更多直观性的解释及代码展示的细节,我们将会再之后的一系列专题文章中继续讨论。

    参考:《线性代数》李尚志编著

              《算法竞赛入门》 刘汝佳编著

    展开全文
  •   我们在敲代码的时候经常会遇到这样的问题,面对一道编程,看着看着就在纸上列起了方程,,,然而计算机哪能给我们列方程!!我们要渐渐从以前上学学的数学解题思维中慢慢抽出来,一点一点地培养起我们的计算机...

      我们在敲代码的时候经常会遇到这样的问题,面对一道编程题,看着看着就在纸上列起了方程,,,然而计算机哪能给我们列方程!!我们要渐渐从以前上学学的数学解题思维中慢慢抽出来,一点一点地培养起我们的计算机的逻辑思维,我认为的最高境界就是——工具人!


     为什么会有这番感慨,还是要从今天看到的非常简单的一道编程题,没有任何数组和集合等数据结构的内容,单单是一道一层的循环结构,我却默默地在纸上列起了方程,并没有计算机角度怎么解题,自此心中很是郁闷,开始怀疑自己的智商~ 哎没办法啊,什么事情刚开始不擅长了但是只要你肯慢慢积累,慢慢培养再难的事情也可以做到的。仅以此篇文章感怀一下,以后决心多敲代码,多像计算机的逻辑一样思考,解方程通过一步步迭代求解! 下面我们来看一下这道小题。

    例题

        有一个容量为10L的空水桶。水桶的上面开始往里灌水,同时下面开始往出流水。
    第一分钟灌水的速度是1L/min,第二分钟灌水的速度是2L/min,第三分钟灌水的速度是3L/min,以此类推。
    而流水的速度固定是3L/min。那么几分钟之后,水桶里能保持灌满水的状态?
    

      当我第一眼看到这个题,并没有像平常那样打开 IDEA ,啪啪敲了起来,而是默默拿起笔在纸上列出了方程。

    	设用了 m 分钟,
    	(1 + 2 + 3 + 4 +···+ m) - 3 * m = 10
    

      哎,脑袋里根本没一点迭代的思想,如果我们把自己想象成计算机,会怎么处理这个问题呢?

    第一分钟: 1 - 3;
    第二分钟: 2 - 3;
    第三分钟: 3 - 3;
    第四分钟: 4 - 3;
    ···········

      如果我们有上面类似的思路,我们就知道自己要做什么了,定义一个变量代表分钟数,然后不断以一为步长递增,定义一个 sum 变量代表水桶里的水量,将各个分钟时刻的相对增加水量累加起来,我们知道我们要用 循环结构 了,而且不知道进行多少次所以要用 while 循环结构,判断条件是什么呢?(是sum判断还是分钟判断呢?) 各个时刻水量怎么计算呢? 有没有需要注意的地方呢?这些问题接踵而来,我们脑子瞬间一副清晰的脉络呈现出来,啪啪几行,快捷的集成开发环境就帮我们写好了代码。

        public static void main(String[] args) {
            int min = 0;  // 定义所用分钟数
            int sum = 0;  //定义水桶水量
    
            while (sum < 10) {
                min++;  // 分钟数增加
                sum += min - 3;
                // 桶里的水不能是负数
                if (sum < 0) {
                    sum = 0;
                }
            }
            System.out.println("一共用了" + min + "分钟。");
        }
    

      是不是看起来非常简单,我都想打死我自己,这么简单的题还要拿出来显摆,?? 没办法,谁让这道题伤了我的心呢~ (注意!!这道题不像一般循环那样直接递增的为判断条件,这里是要通过 min 的递增来计算 sum,要通过 sum 来判定循环成立)
      这告诉我们编程思维的培养是很重要的,让我们多思考,多实践,能想到计算机的逻辑,慢慢成长起来把。

    补充

    补一下今天学到的一个新名词吧,“水仙花数”。

    • 什么是水仙花数?
      • 一个三位数,个位、十位、百位的数字立方和等于原数
        public static void main(String[] args) {
        /*题目:
         获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,求所有的水仙花数并输出
        */
            System.out.print("水仙花数有:");
            for (int i = 100; i <= 999; i++) {
                // 先找出三位数的个位,个位,百位。
    
                // 1.提取个位数
                int ge = i % 10;  // 可以这样想 760 可以被 10 整除,剩下余数就是个位数
                // 2.提取十位数
                int shi = (i / 10) % 10;  //除以10后为 76 ,再除以10求余就是十位数
                // 3.提取百位数
                int bai = i / 100; // 除以100 直接就是整数7.
    
                // 判断当前数字的个位,十位,百位,看其各自的立方和的总和是否等于其本身。是则说明该数字是水仙花数
                if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
                    System.out.print(i + "\t");
                }
            }
        }
    
    展开全文
  • 一道面试的思考

    2014-08-31 10:06:09
    一道面试的思考 前几天下班途中跟同事聊到了一道面试,...如果之前没有遇到过类似的题目,加上面试时的紧张心情,很难能在那么短的时间里想到解决方案,至少我做不到。 好在我有时间,上网看了一下,比较常

    一道面试题的思考

    前几天下班途中跟同事聊到了一道面试题,大意是,给你1-1000个连续自然数,然后从中随机去掉两个,再打乱顺序,要求只遍历一次,求出被去掉的两个数。

    这题其实挺为面试者的,因为要求1分钟内说出解法,且不能使用计算机、纸和笔。如果之前没有遇到过类似的题目,加上面试时的紧张心情,很难能在那么短的时间里想到解决方案,至少我做不到。

    好在我有时间,上网看了一下,比较常见的有两种方法

    求方程组的解

    遍历被打乱的数组时,计算value的累加值和value平方的累加值。结合未打乱之前的数组,这样就能得出x+y = m与x*x+y*y = n两个方程,解这组方程即可算出被去掉的两个数。这种方法比较容易理解,实现起来也比较简单

    使用异或

    这个就麻烦点了。先来说说异或的定义:两个二进制位不同的取1。再来说说异或的两个特性:顺序无关 / 对一个数异或两次等于没有异或。顺序无关就是说异或的元素可以随意交换顺序,而不会影响结果。异或两次可以理解为+x和-x。

    计算出x^y的值

    首先,这两个数组(打乱前和打乱后)各自异或,也就是1^2^…^1000,得到两个异或值。再对这两个异或值进行一次异或,这样就得到了x^y的指(重复部分互相抵消了)。

    // 其实就是把数组的所有元素进行异或,重复部分互相抵消
    result = 1^2^...^1000^1^2...^1000;
    result = 1^1^2^2...^x...^y...^1000^1000;
    result = x^y;
    

    获取计算出的异或值的1所在的位置,并继续异或

    因为x和y是两个不同的整数,所以这两个数的异或结果,转化为二进制的话,一定在某位是1,假设在第3位。也就是说如果把原始数组按第3位是否为0进行划分,就可以分成两个数组,每个数组各包含一个被抽取的数。如果打乱后的数组也按这个规则划分为两个数组,这样就得到了4个数组,其中两组是第3位为0,另外两组是第3位为1。把第3位为0的两个数组所有元素进行异或就能得到被抽取的一个数,同理也就能获得另外一个被抽取的数,于是问题解决。

    展开全文
  • UESTC 1690 这是一道比CCCC简单题难的简单||HiHoCoder #1048 : 状态压缩·二 给定一个n*m的矩阵,使用1*2的小长方形覆盖矩阵,要求完全覆盖的同时不出现重合,也不允许超出边界,问有多少种可能的覆盖方法,方案数...

    这道题搞了很久终于搞懂了,感觉受益匪浅,先贴上题目:

    题目一:UESTC 1690 这是一道比CCCC简单题难的简单题


    这是一道比CCCC简单题难的简单题

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit:65535/262140KB (Java/Others)

    集训队的CFT大爷精通Python

    有一天,CFT大爷跑在vps上的python爬虫程序挂了

    CFT大爷经过缜密的推断,发现程序挂了的原因是Python的垃圾回收机制不够优越,导致内存炸了,那些卖vps的奸商强行杀掉了他的爬虫程序

    CFT大爷决定再也不用python这门垃圾语言,他要发明一个新的语言CFTthon

    CFT大爷的CFTthon是跑在CFT大爷以前写的CFT_OS上的,在CFT_OS中,内存布局是一个n*m的长方形矩阵,而CFTthon所有的变量,都只占用1*2大小的小长方形内存空间。

    CFT大爷在手写CFTthonGC系统时,想到了一个问题:给定n,m,要求用CFTthon的变量把整个内存空间完全覆盖,不重合不遗漏,有多少种方法呢?

    **** 扯淡题意分割线 ****

    给定一个n*m的矩阵,使用1*2的小长方形覆盖矩阵,要求完全覆盖的同时不出现重合,也不允许超出边界,问有多少种可能的覆盖方法,方案数对1e9+7取模

    2<=n<=1000

    3<=m<=5

    Input

    整数n,m

    Output

    方案数

    Sample input and output


    Sample Input

    Sample Output

    2 4
    5

     


    题目二:HiHoCoder #1048 : 状态压缩·二


    时间限制: 10000ms
    单点时限: 1000ms
    内存限制: 256MB

    描述

    历经千辛万苦,小Hi和小Ho终于到达了举办美食节的城市!虽然人山人海,但小Hi和小Ho仍然抑制不住兴奋之情,他们放下行李便投入到了美食节的活动当中。美食节的各个摊位上各自有着非常多的有意思的小游戏,其中一个便是这样子的:

    小Hi和小Ho领到了一个大小为N*M的长方形盘子,他们可以用这个盒子来装一些大小为2*1的蛋糕。但是根据要求,他们一定要将这个盘子装的满满的,一点缝隙也不能留下来,才能够将这些蛋糕带走。

    这么简单的问题自然难不倒小Hi和小Ho,于是他们很快的就拿着蛋糕离开了~

    但小Ho却不只满足于此,于是他提出了一个问题——他们有多少种方案来装满这个N*M的盘子呢?

    值得注意的是,这个长方形盘子的上下左右是有区别的,如在N=4, M=3的时候,下面的两种方案被视为不同的两种方案哦!

    提示:我们来玩拼图吧!不过不同的枚举方式会导致不同的结果哦!

    输入

    每个测试点(输入文件)有且仅有一组测试数据。

    每组测试数据的第一行为两个正整数N、M,表示小Hi和小Ho拿到的盘子的大小。

    对于100%的数据,满足2<=N<=1000, 3<=m<=5。

    输出

    考虑到总的方案数可能非常大,只需要输出方案数除以1000000007的余数。


    样例输入
    2 4
    样例输出
    5

    分析:

    其实这两道题本质是完全一样的,就是用1*2的小长方形完全覆盖n * m的矩形有多少方案。


    下面分析如何用状态压缩DP来解这道题(如果不理解为什么要用DP,为什么要用状压DP见hihoCoder题目中的提示链接,虽然我也看得云里雾里)


    DP顾名思义,我们需要用到状态转移,假设我们现在正在考虑(i,j)这个位置该怎么放(此时这个位置之前的位置已经铺好了)。有三种情况:

    1. 不需要铺砖,因为在位置(i-1,j)铺的是竖砖,(i,j)已经被铺好了。(为什么不用考虑(i,j-1)铺横砖在下面会解释)
    2. 铺横砖,那么(i,j+1)也就被同时铺好了,直接考虑(i,j+2),这正解释了(1)中为什么不用考虑(i,j-1)铺横砖的情况。
    3. 铺竖砖,那么(i+1,j)也就被同时铺好了.


    鉴于以上几种情况,我们将每一个位置的状态用0或1来表示,如果我们在(i,j)铺横砖,那么(i,j)和(i,j+1)都为1,如果我们在(i,j)铺竖砖,那么(i,j)为0,(i,j+1)为1。

    可以用下面的图片增进理解:

    那为什么要这样定义呢,我们可以这么认为,某一个位置的状态为1则表示它对下一行的状态没有限制,而为0时,表示它对下一行的状态有限制(必须为1)。(读者可以将上面的两种情况自己模拟一下)


    然后下一步我们要做的就是对每个位置的放置方法进行检测可行性,并对它计数。


    我们先用一个数来表示某一行的状态,这个数转化为二进制数后,第i个数*(0/1)代表该行第i列的状态。我们需要做的便是判断相邻行的状态是否合法。


    判断方法的解析见代码中的注释。


    由于第一行没有前驱,我们先对第一行进行特判,然后再从第二行开始进行状态转移。


    用dp[i][j]表示铺到第i行,且第i行的状态为j时的总方案数。容易写出状态转移方程为dp[i][j]=dp[i][j]+dp[i-1][k](dp[i][j]一定等于i-1行能与j状态兼容的所有方案数和)

    由于最后一行的状态不可能出现0,所以结果就是dp[n-1][total-1],

    (计算过程中注意取模)


    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <queue>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define mst(a,b) memset((a),(b),sizeof(a))
    #define f(i,a,b) for(int i=(a);i<=(b);++i)
    #define rush() int T;scanf("%d",&T);while(T--)
    
    typedef long long ll;
    const int maxn= 1005;
    const ll mod = 1e9+7;
    const int INF = 0x3f3f3f3f;
    const double eps = 1e-6;
    
    ll dp[maxn][1<<5];
    
    bool one(int state,int len)    //检测某一行内部的状态是否满足要求
    {
        int pos=0;
        while(pos<len)
        {
            if((state&(1<<pos))==0)  //如果这一位为0,说明这一格是竖铺的,检测下一位置
                pos++;
            //其余情况都是横铺的,即当前pos和pos+1的状态都为1
            //当当前pos已经是最右边的或者pos+1的状态不为1
            else if(pos==len-1||!(state&(1<<(pos+1))))
                return false;
            //满足条件就跳过对pos+1的检测
            else pos+=2;
        }
        return true;
    }
    
    bool two(int state_pre,int state_now,int len)  //检测相邻行的状态是否满足要求
    {
        int pos=0;
        while(pos<len)
        {
            if((state_pre&(1<<pos))==0)   //前一行为0,说明是竖铺,这一行的对应位置必须为1
            {
                if((state_now&(1<<pos))==0)
                    return false;
                pos++;
                continue;
            }
            if((state_now&(1<<pos))==0)  //同上
                pos++;
            //当前位置为1,则下一位置必须为1,且下一位置对应的前一行必须为0(竖放)
            else if(pos==len-1||!((state_pre&(1<<(pos+1)))&&(state_now&(1<<(pos+1)))))
                return false;
            else pos+=2;
        }
        return true;
    }
    
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            if(m>n)          //优化,因为此题时间、空间主要消耗在每一行的多种状态上
                swap(m,n);
            int total=1<<m;  //一行的所有状态数
            mst(dp,0);
            for(int i=0;i<total;i++)
            {
                if(one(i,m))
                {
                    dp[0][i]=1;
                }
            }
            for(int i=1;i<n;i++)
            for(int j=0;j<total;j++)     //当前一行的状态
            for(int k=0;k<total;k++)     //前一行的状态
            {
                if(two(j,k,m))
                {
                    dp[i][j]=(dp[i][j]+dp[i-1][k])%mod;
                }
            }
            printf("%lld\n",dp[n-1][total-1]);
        }
        return 0;
    }
    




    展开全文
  • 但对于n的奇偶未知,思路已经提供到这了,奇偶问题应该不解决;看代码: #include #include #include #include #include using namespace std; int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%...
  • 感谢微信平台----一天一道算法---------每天多一点进步---- 今天 刚刚又玩了2盘 LOL 把我的时间全给弄光了..... 因为 晚上 可能开始写课程设计了 抓紧时间 写了今天的 关于那个 stack的 感觉超出我预期想象了 ...
  • 一道字节面试

    2021-08-31 01:26:21
    大家好,我是涛哥。新的一周,估计大家有多工作需要做吧!可能你会忙得焦头乱额,但毕竟是充实的,忙碌才是生活和工作的常态,也值得欣慰。今天,我们来聊一个经典的面试:编辑距离。无论是面试字节...
  • “从前,有一位叫做马克思 普朗克(Max Planck)的帅的物理学家。有一天,他正在思考黑体辐射问题。他看了一下旁边的钟正一秒一秒的过去。...里面的一道一道皮,其中的第五特别有意思:这道初一看
  • 很多同学(包括今天之前的我)都认为动态规划很难,其实很大程度上是因为不知道动态规划是怎么从其他算法一步步优化演变来的,上来就介绍动态规划的方法论,难免接受度比较低。 “输出是最好的学习方法...
  • 上面的分析都是从杯子的角度出发的,这样想要得到最少的尝试次数,似乎比较。我们可以换个角度,从每个高度的楼层来看: 如果,某个楼层是可以安全落下的,那么最少需要多少次尝试呢? 事实上,这就是一个求最优解...
  • 解一元三次方程 虽然我是一个新手,按”规矩“应该要经常在博客里面把自己的...这道之所以试验了这么多次(都是掩饰,倒不如说是WA了这么多次),就是因为反复试了多细节。所以说,dalao们觉得平平无奇、不言自明
  • 题目来源苏格兰2015 中学等级考试数学; A crocodile is stalking prey located 20 meters further upstream on the opposite bank of a river. Crocodiles travel at different speeds on land and in water. ...
  • 【水题一道】7的倍数

    2016-11-06 22:58:25
    发现: 数据大 时间复杂度应该是O(log n)的,可能还会有常数 背包的转移方程只与A[i]%7的值有关,而这个总共只有7种情况 相同余数对应相同的转移方程 转移方程可以写成矩阵乘法的形式 对于A[i]...
  • 同时,今儿还遇到句值得反思的话:“珍惜你所遇见的每一道题”。目前刷题 41 天,LeetCode 上题目刷了 80 道。但如果让我重新再做,应该有不少题目还是搞不定,甚至会出现之前做出来、现在看却没思路的情况。此外,...
  • 一道解决的非常漂亮的算法

    千次阅读 2007-05-04 10:12:00
    这是多年以前做的一道题目,原来自软件报或者电脑报 ,我记不清了。解决这个题目有一个关键的步骤,就是要求一个整数在一个整数三角阵中的坐标。这篇blog就是讨论这个求坐标的问题,不是讨论那个报纸上的题目。...
  • 已知,如图,AB 是 ⊙O 的直径,CE、CF 是 ⊙O 的两条切线,D 是 AE 和 BF 的交点。 求证: AB⊥CD 画出来动态调整图观察,结论没有问题。只是纯几何的证明太。 证明 解析的方法是...
  • 最近比赛遇到了一道李超树优化 DPDPDP 方程,比赛时推出了方程,但由于对斜率优化方程格式的不熟悉,误以为是斜率优化的问题,导致最终错失 ACACAC,因此想要将这三种格式的方程列举在一起,便于后续查阅。...
  • BAT机器学习面试1000系列(第1~305

    万次阅读 多人点赞 2017-09-28 11:37:49
    BAT机器学习面试1000系列 整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接...
  • [DP]解方程

    2018-12-03 14:21:41
    Mirko喜欢解方程。这次他拿到1个多元一次方程A1B1+A2B2+……+AnBn=C。现在给出C的值,并且给出所有的A的值,即A1,A2,……,An的值,求出B1,B2,……Bn有多少组非负整数解。 输入 输入:第一行是两个整数n和c; ...
  • 东京大学1998年入学考试一道题,是向量、数列、双变量、坐标计算、极限等结合的一道题,如下:题目容易看懂,就是已知那些向量和式子,求xn和yn收敛时候的角度theta取值范围和对应的极限值。一开始,蛮试下前几项...
  • 对于数论的话,先来一道简简单单的小。 相信这个大家有做过,题解也不差我一个 面:求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。 input 两个正整数a,b。 output 一个正整数解x 数据保证该方程...
  • 这是我的第二篇博客,小学期的程序设计课程设计告一段落,内容是完成201912的CSP认证考题,我完成了前三。攻克难题还是非常有成就感的,所以发博客纪念一下。最近也是在进行ACM的训练,希望自己能再接再厉,不断...
  • 要知道,你会做一道题,因为步骤丢分,这是多不应该。出现这种情况,只能说明你平时没有注重步骤书写。希望同学们能够应以为戒。多高考的考生也总是在步骤书写上犯错,一方面是导致丢分,另外一方面是耽误自己的...
  • 微分方程的阶数、任意常数个数、特征根个数的关系,以及由解倒求各种类型微分方程的方法:倒推法、行列式法、特解代入法、消C法、综合法。
  • 本人是一个喜欢算法的新手,本博客简要的阐明了对一道DP问题(面试)的解决思路,若本博客有错误需要修改的或对排版风格有要改进的等等的建议,请留言或发邮件给我。写博客是一个互相学习的过程,期待收到您的建议...
  • 这里有三种方法可以从递归方程得到算法的时间复杂度: 代入法 递归树 主方法 代入法 ...关于代入法,有一道这个知识点最,只要你看懂了,就掌握了。 有取上整或者取下整的时候,需要放缩,常常
  • 常微分方程部分错题

    2017-04-14 19:17:14
    好久没更新,这段时间忙着做一些小的processing和帮别人完成一个小东西,而且也想了多,过去,现在,以及未来,也许还没有想清楚吧,所以现在就暂时放一放,安心,慢慢的过着自己的生活,就这样。 题目一: dxdy...
  • 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,131
精华内容 2,452
关键字:

很难的一道方程题