算法分析与设计:动态规划(小规模)DynamicProgram

这篇博客不介绍动态规划的基本概念,而是专注于小规模动态规划的实现。通过二维表解决能在允许范围内的问题,例如背包问题。对于大规模问题,会讨论如何使用优化数据结构以避免内存限制。文中提供核心代码和运行示例。
摘要由CSDN通过智能技术生成

基础知识:

关于动态规划的知识,请自行查看其他资料。这里不讲解何为动态规划,主要聚焦于实现。

因为很多资料讲的知识很多,但是没有示例。

小规模动态规划

所谓小规模,就是可以在允许的范围内利用二维表解决问题。二维表的大小取决于规划内容的数量以及最大允许范围。

就背包问题而言,取决于物品的件数和背包容量。

对于大规模的的问题,二维表的使用将会超出内存允许界限,这是将使用优化的数据结构,而不是一个不断增长或固定的数据结构。

 

具体实例:

数据结构:

//价值和体积数组,一一对应 
vector<int>  p, v;
//动态规划表
 vector<vector<int>> Csheet;
//选中的物品序列,0为放弃,1为选中
 vector<char> SelectedList;

核心代码:

//临时数组,规划表
vector<int > Cline;
//vector<vector<int > > Csheet;
//初始化,第0行填充
for (int i = 0; i <= c; ++i) {
	Cline.push_back(0);
}
Csheet.push_back(Cline);
Cline.clear();
//动态规划
for (unsigned int i = 0; i < p.size(); ++i) {
    for (unsigned int j = 0; j <= c; ++
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值