动态规划
ang_ang_ge
初中生,见谅Thanks♪(・ω・)ノ
展开
-
[动态规划]装满背包的方法(数量不限)
题目简介:有大小为10 20 50 100 的四种物品,装入容量为 n 的背包,问刚好装满背包的方法数样例1:输入 0输出 0样例2:输入 100输出 11样例3:输入 15输出 0注意事项:由于大小都是10的倍数,可进行判断:若容量n是10的倍数,则将n除以2,物品大小以1 2 5 10计算;若容量n不是10的倍数,则输出0,程序结束。思路:循环4个物品大小与1~n的容量,两者相减得到一个容量,此容量指放入当前循环物品前的容量,放入当前原创 2022-01-22 20:07:04 · 670 阅读 · 0 评论 -
[动态规划]编辑距离
【编辑距离】设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:1、删除一个字符;2、插入一个字符;3、将一个字符改为另一个字符。对任意的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。【输入】第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。【输出】只有一个正整数,为最少字符操作次数。【输入样例】sfdqxbwgfdgw【输出样例】4dp函数中第一个坐标代表第一个字符串中的原创 2022-01-05 23:04:05 · 426 阅读 · 0 评论 -
[动态规划]数的划分
【数的划分】将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法。 输出一个整数,即不同的分法。【输入】两个整数n,k(6<n≤200,2≤k≤6),中间用单个空格隔开。【输出】一个整数,即不同的分法。【输入样例】7 3【输出样例】4思路:dp[i][j] 指在有 i 个数划分为 j 个时所有的方法数如果是最普通的方程的话应该长这样:dp[i][j原创 2021-12-22 22:57:38 · 863 阅读 · 0 评论 -
[动态规划]装满背包的方法数
呐,题在这儿【装满背包的方法数】有n个物品,找出能刚好装满背包(容量为t)的方法数。如:n=5, 5个物品大小分别为1,2,3,4,5,背包容量t=5;那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。【输入】输入的第一行是两个正整数n和t,用空格隔开,其中1≤n≤20,表示物品的个数,t为背包容量(1≤t≤1000);接下来的一行是n个正整数,用空格隔开。【输出】和为t的不同的组合方式的数目。【输入样例】5 51 2 3 4 5【输出样例】3思路:循环遍历每个物品原创 2021-12-15 22:55:02 · 1827 阅读 · 0 评论 -
[动态规划]导弹拦截2(习题)
动规导弹来喽!原创 2021-12-01 22:58:41 · 233 阅读 · 0 评论 -
[动态规划]混合背包问题(有三种背包问题模板)
问题如下:有一个已知容量的背包与一些已知占用空间与价值的物品,一些物品只有一个,一些有几个,一些有无数个,问背包可容纳的最大价值。本题就是将0/1背包、多重背包与完全背包问题进行结合,在判断问题类型后进行相对应的操作模板0/1背包问题:void one(int c, int w){ for (int v = m; v >= w; v--){ f[v] = max(f[v], f[v - w] + c); }}完全背包问题:void wan(int c, int w原创 2021-11-14 14:27:29 · 591 阅读 · 0 评论 -
[动态规划]完全背包问题
本题与0/1背包问题非常相似,只是每个物品都有无限个。给定物品种类个数,背包容量与各个物品的大小与价值,问可容纳的最大价值是多少?#include <bits/stdc++.h>using namespace std;// w,c数组分别储存重量和价值 int w[200],c[200],f[200];int main(){ int m, n; cin >> m >> n; for (int i = 1; i <= n; i++){ cin原创 2021-11-10 22:05:54 · 41 阅读 · 0 评论 -
[动态规划]路径数
在m行n列中有多少条路径可以从(1,1)到(m,n)?#include <bits/stdc++.h>using namespace std;int a[1005];int main(){ int m,n; cin >> m >> n; // 从左到右,逐次更新 for (int i = 1; i <= m; i++){ for (int j = 1; j <= n; j++){ if (i == 1 && j ==原创 2021-10-31 11:07:13 · 92 阅读 · 0 评论 -
[动态规划]价值相近的背包
0/1背包问题续:价值相近的背包有两个背包与一些物品,放入两个背包中使价值最相近,问最小价值差是多少?这道题中,数值具有容量和价值双重身份,价值差就是最大价值。要做的就是在一个容量为总容量/2的背包中放尽量大价值的物品即可(0/1背包问题思路看https://blog.csdn.net/ang_ang_ge/article/details/120799476?spm=1001.2014.3001.5501)代码#include <bits/stdc++.h>using namesp原创 2021-10-24 11:58:24 · 1621 阅读 · 0 评论 -
[动态规划]0/1背包问题(省空间复杂度)
0/1背包问题是动态规划中最为经典的题目。有n个物品,已知各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?样例输入:3 83 35 45 5样例输出:8上一篇文章中用了二维数组,比较浪费空间复杂度,这里使用一维数组,思路与上一篇相同。(一维数组只保留最高价值)由于用了一维数组,所以关键判别式应为f[j] = max(f[j], f[j - w[i]] + c[i]);代码如下:#include <bits/stdc++.h>using原创 2021-10-17 10:03:20 · 461 阅读 · 0 评论 -
[动态规划] 0/1背包问题
0/1背包问题是动态规划中最为经典的题目。有n个物品,已知各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?样例输入:3 83 35 45 5样例输出:8思路:动态规划,列表为先接下来需要寻找规律,关键节点为:当可以放入选定物品时进行价值比较。如【5,2】:当前可以放入物品2,这时需要比较两者价值,则比较【5,1】与【0,1】+自身价值【5,1】是指如果不替换的价值;而【(5 - 5),1】是指腾出物品所需空间后剩余价值(第一个5为当前背包容量原创 2021-10-16 18:00:20 · 57 阅读 · 0 评论