ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态规划 1 讲评

2019-07-02 09:47:54  阅读:246  来源: 互联网

标签:背包 凑出 讲评 枚举 差距 物品 动态 规划 dp


T1 顺手牵羊

题意:最少多少个正整数的平方和等于一个给定的数.

做法一

拉格朗日四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和.

所以我们只需要做一个三维的枚举(四维压成三维),时间复杂度 O(n log n).

做法二

这题很容易看出是背包问题.

我们可以把每一块地看成一个价值为 1 ,重量为它的面积的物品.

然后背包容量是我们给出的数.

做一个完全背包即可.

T2 Building

这道题是二维费用背包模板题,可以直接套模板.

T3 [NOIP福建夏令营]生日礼物

题意:如何将 N 个数分成个数相同的两堆,使这两堆中每一堆数的和的差值最小.

二十分做法:暴力求解.

用一个 DFS 枚举所有数放在第一堆,并适当剪枝.

满分做法:判定性 DP.

我们定义: dp[i][j] : 标记前 i 个礼物能否凑出差距为 j 的礼物,能则 dp[i][j] = 1,否则 dp[i][j] = 0.

首先,0 个礼物凑出差距为 0 的礼物堆肯定是成立的,先标记为 1.

然后就开始 DP,第一层 i 枚举选的物品个数,第二层 j 枚举差距.

每一次枚举,判断 dp[i-1][j] 是否为 1,如果为 1,那么代表前 i-1 个物品可以凑出差距为 j.

那么,我们就把第 i 个物品也加进去,但是要讨论两种情况:

① j 加 a[i],减 b[i];

② j 加 b[i],减 a[i].

因为差距是对立的,你竟然选择了把 A 物品放到了这一堆,那么 B 物品一定要放在那一堆,差距为 abs(A - B).

所以,答案也从差距从小到大开始枚举,枚举出来 dp 值为 1 时直接输出即可.

T4 投资

多重背包模板题.

但是,只有多重背包肯定时不够的,时间复杂度会超。

标签:背包,凑出,讲评,枚举,差距,物品,动态,规划,dp
来源: https://www.cnblogs.com/zengpeichen/p/11118575.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有