0%

背包问题(Knapsack problem)

背包问题指这样一类问题,题意往往可以抽象成:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。

维基百科

部分背包问题

问题描述

部分背包问题和0/1背包问题的区别就是:部分背包问题中的单个物品,可以取一部分装入背包。而0/1背包问题则是要么全部拿走,要么一无所有

Subset Sum Problem

问题描述

If for each item the profit and weight are equal, we get the subset sum problem

Given a set of N (N≤40) integers each of them is at most 1012 determine the largest sum subset having sum less than or equal S (S≤1018)

0/1背包问题

问题描述

阅读全文 »

遺傳算法

遗传算法的基本运算过程如下: [2]
(1)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。 [2]
(2)个体评价:计算群体P(t)中各个个体的适应度。 [2]
(3)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。 [2]
(4)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。 [2]
(5)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。 [2]
(6)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。 [2]
遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。 [1]

組合優化

阅读全文 »

leetcode.LCP 13. 寻宝

构造出S>M1,M2,Mn>T的图信息,求解旅行商问题

旅行商问题 贪心算法

  • 1.先计算矩阵两两之间的最短路信息
  • 2.计算S>Oi>Mi的最小花费
  • 3.计算Mi>Oj>Mj的最小花费
  • 4.计算Mj>T的最小花费

不是最优解
minimalSteps.cpp

旅行商问题 动态规划

  • 1.先求出 S>Oj,Mi>Oj,S>T,Mi>T之间的最短路信息
    求此矩阵信息
$O_1$ $O_2$ $O_3$ $O_{m-1}$ $O_{m}$ T
S
$M_1$
$M_2$
$M_{n-1}$
$M_{n}$
  • 2.根据第一步得到的结果,求出 S>Oj>Mi,Mi>Oj>Mii之间的最短路信息
S $M_1$ $M_2$ $M_{n-1}$ $M_{n}$
S 0
$M_1$
$M_2$
$M_{n-1}$
$M_{n}$
阅读全文 »

问题描述

Alice 和 Bob 两个人轮流玩一个游戏,Alice 先手。

一开始,有 n 个石子堆在一起。每个人轮流操作,正在操作的玩家可以从石子堆里拿走 任意 非零 平方数 个石子。

如果石子堆里没有石子了,则无法操作的玩家输掉游戏。

给你正整数 n ,且已知两个人都采取最优策略。如果 Alice 会赢得比赛,那么返回 True ,否则返回 False 。

动态规划

dp[i] 代表i个石子,Alice是否会赢得比赛
转移方程 dp[i] = dp[i] || !dp[i - j * j]; (j > 0, j*j<=i)

winnerSquareGame.cpp

记忆化搜索

winnerSquareGame_1.cpp

阅读全文 »

问题描述

给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。

BFS搜索+最小堆

  • 1.maxHeightMap 维护矩阵maxHeightMap,maxHeightMap[i][j] 代表 (i,j) 格子,水位可以达到的最大高度
  • 2.初始化maxHeightMap[i][j]等于2000
  • 3.将矩阵各个边界放入最小堆
  • 4.循环从堆中拿出堆顶元素,并Pop,更新堆顶元素附近的格子,如果附近格子的maxHeightMap大于堆顶元素,赋值maxHeightMap为堆顶元素的值,并将此格子入堆
  • 5.循环直到堆为空
  • 6.根据 maxHeightMap - heightMap,算出可以积多少水

时间复杂度$O(n^2)$

MinHeap.h
trapRainWater_1.cpp

阅读全文 »