大意: 两种糖,1和2 每个小朋友只能拿一种颜色的糖。 找出三个小朋友,拿的糖数目和最大(三个小朋友拿同一种颜色的糖) 若出现相等情况,取最小序号的那个小朋友所在组。
90%用例。
二维数组,'S’为有水的区域,H为无水的区域,相邻的S区域(被H和边界包围)为湖泊。求湖泊的数量。
用bfs:80%用例(数组越界??找不到对应位置)
卡车装货物,体积有限,使价值最大。
用贪心:63.45%用例
链接:01背包
验证可行性 既然开头已经说了两个验证问题是否可以使用动态规划求解的方法,那么为何不试一试呢?
先来看看最优化原理。同样,我们使用反证法:
假设(x1,x2,…,xn)是01背包问题的最优解,则有(x2,x3,…,xn)是其子问题的最优解,假设(y2,y3,…,yn)是上述问题的子问题最优解,则有(v2y2+v3y3+…+vnyn)+v1x1 > (v2x2+v3x3+…+vnxn)+v1x1。说明(X1,Y2,Y3,…,Yn)才是该01背包问题的最优解,这与最开始的假设(X1,X2,…,Xn)是01背包问题的最优解相矛盾,故01背包问题满足最优性原理。
至于无后效性,其实比较好理解。对于任意一个阶段,只要背包剩余容量和可选物品是一样的,那么我们能做出的现阶段的最优选择必定是一样的,是不受之前选择了什么物品所影响的。即满足无后效性。
自上而下记忆法 就像上一篇里的解法一样,自上而下的解法与分治法的区别就是增加了一个数组用来存储计算的中间结果来减少重复计算。这里,我们只需要多定义一个二维数组。
表格中,每一个格子都代表着一个子问题,我们最终的问题是求最右下角的格子的值,也就是i=4,j=10时的值。这里,我们的初始条件便是i=0或者j=0时对应的ks值为0,这很好理解,如果可选物品为0,或者剩余容量为0,那么最大价值自然也是0。