Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法基础-动态规划

算法基础-动态规划

作者头像
她的店里只卖樱花
发布于 2022-10-31 08:46:06
发布于 2022-10-31 08:46:06
48000
代码可运行
举报
文章被收录于专栏:常用算法模板常用算法模板
运行总次数:0
代码可运行

背包问题

01.01背包问题

题目描述

N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

i 件物品的体积是 vi,价值是 wi

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。

输入格式

第一行两个整数,,用空格隔开,分别表示物品数量和背包容积。

接下来有 行,每行两个整数 ,用空格隔开,分别表示第件物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

数据范围

输入样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
4 5
1 2
2 4
3 4
4 5

输出样例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
8

题解

时间复杂度

核心思想

version1:2维暴力(朴素)做法

—> 在不超过j容积的情况下前选择前个物品的最优解

version2:1维优化版本

由二维可知我们跟新f[i][j] 只需要用到状态 也就是前个物品的状态又因为已经是最优解 所以我们可以用所谓的的滚动数组进行优化 即: if(j ≥ v)如果从前往后遍历的话我们用 来跟新 的时候就不能保证对于来说是用同一时期进行跟新会导致数据错误 总结来说就一句话 如果用到上层状态就逆序遍历 否则就顺序遍历

核心函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// version1

for(int i = 1; i <= n; i ++ ) 
{
	int v, w; cin >> v >> w; 
	for(int j = 0; j <= m; j ++ )
		f[i][j] = f[i - 1][j]; 
		if(j >= v] f[i][j] = max(f[i][j], f[i - 1][j - v] + w);
}
// version2 

for(int i = 1; i <= n; i ++)
{
		int v, w; cin >> v >> w; 
		for(int j = w; j >= v; j -- )
			f[j] = max(f[j], f[j - v] + w); 
}

代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

using namespace std;

const int N = 1010;
int n, m;
int v, w;
int f[N];

int main (){
    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
        cin >> v >> w;
        for(int j = m; j >= v; j --)
            f[j] = max(f[j], f[j - v] + w);
    }
    cout << f[m] << endl;
    return 0;
}

02.完全背包问题

03.多重背包问题

04.多重背包问题II

05分组背包问题

线性DP

01.数字三角形

02.最长上升子序列

03.最长上升子序列II

04.最长公共子序列

05.最短编辑距离

题目描述

给定两个字符串 ,现在要将 经过若干操作变为 ,可进行的操作有:

  1. 删除–将字符串 中的某个字符删除。
  2. 插入–在字符串 的某个位置插入某个字符。
  3. 替换–将字符串 中的某个字符替换为另一个字符。

现在请你求出,将 变为 至少需要进行多少次操作。

输入格式

第一行包含整数 ,表示字符串 的长度。

第二行包含一个长度为 的字符串

第三行包含整数 ,表示字符串 的长度。

第四行包含一个长度为 的字符串

字符串中均只包含大小写字母。

输出格式

输出一个整数,表示最少操作次数。

数据范围

输入样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10 
AGTCTGACGC
11 
AGTAAGTAGGC

输出样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
4

题解

时间复杂度

状态表示:

集合:将的操作方式

属性:

状态计算

有三种操作,所以有三个子集 ok子集划分完了 考虑状态转移的时候 先考虑如果我没有进行这个操作应该是什么状态 然后考虑你进行这一步操作之后会对你下一个状态造成什么影响 然后再加上之前状态表示中你决策出来的那个DP属性 这样就可以自然而然地搞出来转移方程啦

  • 删除操作: ​

删掉之后匹配 ​

所以之前要先做到匹配 ​

  • 插入操作:

插入之后完全匹配,所以插入的就是

那填之前匹配

  • 替换操作:

改成之后想要匹配

那么修改这一位之前,应该与匹配

但是如果本来a[i]与b[j]这一位上就相等,那么不用改,即

好的那么就由以上三个可能状态转移过来,

细节:

如果初始长度就是0,那么只能用插入操作让它变成

如果同样地,如果的长度是0,那么只能用删除操作让它变成b

核心函数(转移方程):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
            int flg = a[i] != b[j];
            f[i][j] = min(f[i - 1][j - 1] + flg, f[i][j]);
        }

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>

using namespace std;
const int N = 1010; 

int f[N][N];
char a[N], b[N];
int n, m;

int main(){
    cin >> n >> a + 1 >> m >> b + 1;
    memset(f, 0x3f, sizeof f);
    for(int i = 0; i <= n; i ++)
        f[i][0] = i;
    for(int i = 0; i <= m; i ++)
        f[0][i] = i;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
            int flg = a[i] != b[j];
            f[i][j] = min(f[i - 1][j - 1] + flg, f[i][j]);
        }
    cout << f[n][m] << endl; 
    return 0;
}

06.编辑距离

题目描述

给定 个长度不超过 的字符串以及 次询问,每次询问给出一个字符串和一个操作次数上限。

对于每次询问,请你求出给定的 个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。

每个对字符串进行的单个字符的插入、删除或替换算作一次操作。

输入格式

第一行包含两个整数

接下来 行,每行包含一个字符串,表示给定的字符串。

再接下来 行,每行包含一个字符串和一个整数,表示一次询问。

字符串中只包含小写字母,且长度均不超过

输出格式

输出共 行,每行输出一个整数作为结果,表示一次询问中满足条件的字符串个数。

数据范围

,

输入样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3 2
abc
acd
bcd
ab 1
acbd 2

输出样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1
3

题解

区间DP

01.石子合并

数位DP

01.整数划分

题目描述

一个正整数 可以表示成若干个正整数之和,形如:,其中

我们将这样的一种表示称为正整数 的一种划分。

现在给定一个正整数 ,请你求出 共有多少种不同的划分方法。

输入格式

共一行,包含一个整数

输出格式

共一行,包含一个整数,表示总划分数量。

由于答案可能很大,输出结果请对 取模。

数据范围

输入样例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5

输出样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
7

题解

时间复杂度

思想和完全背包一致

=

压缩之后:

核心函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i = 1; i <= n; i ++)
    for(int j = i; j <= n; j ++)
        f[j] += f[j - i];

代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

using namespace std; 

const int N = 1010, MOD = 1e9 + 7;

int n, f[N];

int main(){
    cin >> n; 
    f[0] = 1;
    for(int i = 1; i <= n; i ++)
        for(int j = i; j <= n; j ++)
            f[j] = (f[j] + f[j - i]) % MOD;
    cout << f[n] << endl; 
    return  0;
}

状态压缩DP

01.蒙德里安的猜想

02.最短Hamilton路径

树形DP

01.没有上司的舞会

记忆化搜索

01.滑雪

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
区块链旅游助力军开进宁夏,严打“三黑”
毋庸置疑,在区块链旅游时代,尤其是国际区块链旅游平台途易和乐鸥在线文旅在旅游行业的一番作为后,更让人相信只有区块链技术才能根治旅游市场乱象。
区块链先锋
2018/08/01
6.7K0
区块链旅游助力军开进宁夏,严打“三黑”
区块链:旅游违法不仅仅是罚款那么简单
日前,文化和旅游部监管司相关负责人表示,“我们希望媒体通过各种形式,加强对旅游领域失信当事人联合惩戒的宣传力度,在社会上形成广泛震慑,共同推动旅游行业诚信体系建设。”在2018年的中国旅游科学年会上,文化和旅游部副部长李金早透露,在未来的旅游市场监管方面,我们要以更大的决心去推动旅游违法行为入刑,触犯刑法的则严格按照刑事法律程序办理,而不只是罚款了之。
区块链先锋
2018/08/03
5.8K0
区块链:旅游违法不仅仅是罚款那么简单
旅游行业的“羽毛”,区块链旅游如何守护?
在区块链旅游口号喊出来的这段时间内,我一直很好奇当下的旅游乱象已经发展到了什么程度,闲暇之余打开了知乎,在回答云南旅游乱象的相关问题底下,看到了以下几位网友的独特见解:
区块链先锋
2018/08/07
2.5K0
旅游行业的“羽毛”,区块链旅游如何守护?
携程新危机!“VR+旅游”能和区块链旅游相媲美吗?
自去年7月欧洲旅游社巨头途易集团宣布布局区块链,到今年初乐鸥在线文旅迅速将区块链的“爪牙”布局到旅游六大领域,区块链旅游异军突起,不断分占传统旅游市场份额。传统OTA平台逐步陷入岌岌可危的局势。
区块链先锋
2018/08/10
1.7K0
携程新危机!“VR+旅游”能和区块链旅游相媲美吗?
首个全域智慧旅游平台上线,区块链旅游的“低配版”?
区块链刮起的飓风已然席卷整个旅游业,上到政府、监管机构,下到旅游平台、游客等,无不深受区块链旅游的恩泽。如今,区块链旅游大风也卷起了较多“低配”产品,一步步顺区块链时代发展。那么这些“低配”产品又是如何发挥自身优势以贴近时代与市场需求的呢?
区块链先锋
2018/08/16
3K0
首个全域智慧旅游平台上线,区块链旅游的“低配版”?
从“观光式旅游”到“体验式旅游”,区块链功不可没
在经济水平不断提高态势下,区块链旅游时代逐步到来,民众对旅游品质的追求渐进提高,国际旅游人数逐年攀升。尤其是在乐鸥在线文旅等区块链旅游平台逐步建立起去中心化的旅游机制系统后,旅游优质服务体验已经成为衡量旅游质量的标准。旅游行业逐步从“传统观光式”到现今的“体验式”,区块链技术起到了极大的助力作用。
区块链先锋
2018/08/18
1.4K0
从“观光式旅游”到“体验式旅游”,区块链功不可没
魏小安:现在是旅游服务质量最好的时期,和区块链助力息息相关
中国旅游从最早的外事接待逐渐上升为第三产业的支柱性产业,在市场整体架构、旅游服务质量、游客素质等方面都将在全方位的提升。但是近些年发展速度迅猛,无不和迅速崛起的区块链息息相关。区块链旅游布局已然逐步成熟,又会以怎样的新姿态去迎接新时代旅游呢?
区块链先锋
2018/08/15
1.4K0
魏小安:现在是旅游服务质量最好的时期,和区块链助力息息相关
token定义在区块链旅游中担任何种角色?
对于旅游业的发展来说,区块链技术同样没有缺席。Token,常见于区块链旅游的文章中。Token是什么?有人翻译成通证,有人翻译成代币,中国人民大学教授杨东,称其为“共票”。然而,放在区块链旅游平台中,Token更多地是指“积分”。例如,乐鸥在线文旅这一区块链旅游平台,自构建之初,就在其旅游生态圈中搭建起了Token系统,作为区块链旅游平台流通与循环使用的工具。
区块链先锋
2018/08/23
2.1K0
token定义在区块链旅游中担任何种角色?
去哪儿兵败携程后,携手区块链旅游从头再来
携程和去哪儿在过去的十年,战火纷飞,旅游行业因其恶性竞争而“天翻地覆”。如今步入区块链旅游时代,一直寻求新技术立足点的去哪儿也找到了新的生机。去哪儿的区块链旅游布局又是如何力挽狂澜,在携程“猖狂”的垄断时代,寻找自身的立足之地?
区块链先锋
2018/08/02
5.3K1
去哪儿兵败携程后,携手区块链旅游从头再来
区块链与工业4.0颠覆旅游行业,需面临的挑战
工业4.0是由德国政府《德国2020高技术战略》所提出的十大未来项目之一。而区块链则是工业4.0的重要组成部分。两者应用于旅游行业,诞生了“区块链旅游”这一旅游新模式。“诞生”虽易,但新模式的延续及发展,并非轻而易举,区块链与工业4.0颠覆旅游行业,需面临巨大的挑战。
陌上花开2018
2018/05/28
9321
区块链与工业4.0颠覆旅游行业,需面临的挑战
旅游行业真的需要区块链技术的加持吗?
尽管“区块链+”不断涌现,但“区块链+”并不是所有行业都通用,更多的则是借区块链热度的伪应用,缺乏可行性。“区块链+旅游”也曾一度受到质疑,那么,旅游行业是否需要区块链这一技术加持?
陌上花开2018
2018/05/26
9801
旅游行业真的需要区块链技术的加持吗?
对话马云:区块链在未来20年不仅重构金融系统,旅游才是的最佳重构点
区块链旅游自崛起之日就拉开了旅游行业的风口,这是来自对第三产业大发展的支持,是来自“全民旅游”时代到来的期盼。实际上,区块链旅游的作用不仅仅是为第三产业提供新的旅游产业支柱,带来新的经济增长点,更是在未来20年重构其旅游系统体系,颠覆整个旅游产业。
区块链先锋
2018/08/20
7610
对话马云:区块链在未来20年不仅重构金融系统,旅游才是的最佳重构点
昌吉回族自治州奏响文旅融合交响曲,文旅链前方指路
古往今来,旅游与文化一直都是惺惺相惜,文化是旅游的灵魂,旅游是文化的载体。如今步入区块链旅游时代,乐鸥在线文旅基于文旅行业共识和区块链技术效用兴起的文旅链正在以平缓之势改变整个旅游产业布局。
区块链先锋
2018/08/17
1.4K0
昌吉回族自治州奏响文旅融合交响曲,文旅链前方指路
“数字丝绸之路”能否给区块链旅游带来新的发展?
6月1日,据Cryptovest消息,迪拜提出基于区块链技术的数字丝绸之路倡议,旨在解决全球贸易体系的关键问题和挑战。而在5月26日,区块链+文旅产业高峰论坛暨乐鸥文旅在线新闻发布会在深圳举行,就寻求旅游贸易等旅游行业的发展问题展开了热烈讨论。那么,迪拜的“数字丝绸之路”的发声,能否为乐鸥进阶旅游贸易市场,带来良机呢?
陌上花开2018
2018/06/02
1.1K1
“数字丝绸之路”能否给区块链旅游带来新的发展?
旅游会是区块链下一个无法到达的地方吗?
互联网在逐步发展过程愈发暴露出所存在的“封闭”和不足,从而加固了时代对区块链崛起的信心和希望。而区块链落地到各行各业成为历史大趋势,区块链旅游成为了下一个在众目睽睽之下成长的领域。
区块链先锋
2018/08/14
2.2K0
旅游会是区块链下一个无法到达的地方吗?
区块链旅游,让旅游回归到旅游的本质
我所认同的旅行的意义,就是离开自以为是的生活,走进还未泛滥的他乡。古有走遍大江南北的文人志士,今有在辞职信上写上“世界那么大我要去看看”的潇洒身影,旅游其实间接的给了我们一个逃离的出口,而如今的旅游市场似乎在慢慢搅乱这一切,所以我们转身投入了区块链旅游的怀抱。
区块链先锋
2018/08/08
3K0
区块链旅游,让旅游回归到旅游的本质
区块链+旅游业
随着全球经济的持续发展,旅游业展现出强大生命力。据WTTC与牛津经济研究院统计,2017年旅游业增长3.8%,创造价值高达7.9万亿美元。旅游行业的迅速发展催生了在线旅游平台(OTA)的兴起,这种提供市场渠道、旅行产品、周边服务等一体服务的平台迅速吸引了大量用户,旅游市场被OTA所垄断。OTA的运营成本不可避免的转换为用户高昂的出行费用。
广州闪链科技
2018/10/19
1.3K0
区块链+旅游业
乐鸥文旅链全国路演已跨越5大省市,下一站会去你的家乡吗?
2018年下半年,乐鸥在线文旅为搭建乐鸥生态圈,将区块链旅游普及至大众,开启了“乐鸥文旅链CTC全球路演”活动,融合主题演讲、互动研讨、案例分享等多种形式,为全球区块链创业投资者,旅游业界人士以及普通公众带来一场场“大师智慧+实践干货”的区块链旅游盛宴。
区块链先锋
2018/07/14
6590
乐鸥文旅链全国路演已跨越5大省市,下一站会去你的家乡吗?
CTC文旅链全球路演引发的冷思考:区块链旅游时代真的已经到来?
区块链自问世就颇受关注,区块链技术也已经在各行各业蓄势待发,以区块链旅游为主导的文化旅游产业更是因为文旅链,被赋予“颠覆”时代的光环,掀起国内旅游市场的热潮。
区块链先锋
2018/07/16
8990
CTC文旅链全球路演引发的冷思考:区块链旅游时代真的已经到来?
中国银行利用区块链助力西藏脱贫,旅游扶贫进入正题
区块链的运用不仅局限于商业层面,在造福民生方面也开始崭露头角。“利用区块链技术助力偏远地区脱贫攻坚”这样的想法逐步落到实地,这与早期区块链旅游扶贫的提议如出一辙,并给区块链旅游扶贫的实践提供了借鉴。
陌上花开2018
2018/05/25
1.2K0
中国银行利用区块链助力西藏脱贫,旅游扶贫进入正题
推荐阅读
相关推荐
区块链旅游助力军开进宁夏,严打“三黑”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验