回溯与动态规划
无情的搬砖机器
不求甚解
展开
-
01背包的空间优化方法
摘自Tianyi Cui童鞋的《背包问题九讲》,稍作修改,方便理解。01背包问题描述已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]。限制:每种物品只有一件,可以选择放或者不放问题:在不超过背包容量的情况下,最多能获得多少价值或收益相似问题:在恰好装满背包的情况下,最多能获得多少价值或收益这里,我们先讨论在不超过背包容量的情况下,...转载 2020-06-10 15:48:24 · 756 阅读 · 2 评论 -
递归的优化——记忆化搜索
1、斐波那契数列递归做法:class Solution {public: int fib(int n) { if(n==0) return 0; if(n==1) return 1; return Fibonacci(n-1)+Fibonacci(n-2); ...原创 2019-08-23 20:42:19 · 482 阅读 · 0 评论 -
找子集和剪枝操作
一:求没有重复元素的子集1、使用vector存放#include<iostream>#include<vector>#include<string>using namespace std;class Solution {public: vector<vector<int>> subset(vector<i...转载 2019-08-21 21:11:51 · 287 阅读 · 0 评论 -
回溯实现排列和组合问题
一、排列 问题1、电话号码的数字组合(17)给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。#include<iostream>#include<vector>#include<string>#include<assert.h>usi...转载 2019-08-22 14:00:59 · 651 阅读 · 0 评论 -
回溯法解决二维平面上的问题
1、力扣:79给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word ...转载 2019-08-22 20:12:03 · 357 阅读 · 0 评论 -
力扣 343 整数拆分
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。思路:递归方法比如4,分割为1,2,3然后再考虑子问题即可,返回其中最大的即可。class Solution {private: int max3(int a, int b, int c) { return max(a, max(b, c)); } int proc...转载 2019-09-07 14:54:54 · 344 阅读 · 0 评论 -
01背包
1、递归方法class Solution {private: //用[0,,,index]的物品,填充容量为c的背包的最大价值 int bestValue(const vector<int>& w, const vector<int>& v, int index, int c) { if (index < 0 || c <= ...原创 2019-09-15 11:18:49 · 160 阅读 · 0 评论