
【DP】KC的瓷器(porcelain)
预处理每一排的最大价值:对于每一排,我们计算前缀和和后缀和,然后预处理每一排取k个瓷器的最大价值。 动态规划:使用一个二维数组dp,其中dp[i][j]表示在处理了i排,取了j个瓷器的情况下,取得的最大价值。通过逐步更新dp数组,我们可以找到最优解。 读取输入:读取n和m的值,然后读取每一排的瓷器数量及其价值。 预处理每一排:计算每一排的前缀和和后缀和,然后预处理每一排取k个瓷器的最大价值。 动态规划:使用二维数组dp来记录取i排j个瓷器的最大价值,逐步更新dp数组,找到最优解。
发布日期:2021-05-07 22:46:27
浏览次数:28
分类:精选文章
本文共 1838 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要找到一种方法来最大化从n排柜子中取出m个瓷器的总价值。每次只能从一排中取出最左边或最右边的瓷器。我们可以使用动态规划结合预处理来解决这个问题。
方法思路
解决代码
import sysdef main(): n, m = map(int, sys.stdin.readline().split()) t = [0] * (n + 1) # t[i]表示第i排的总瓷器数 a = [ [0]*(100 + 1) for _ in range(n + 1)] # a[i][j]表示第i排取j个瓷器的最大总价值 for i in range(1, n+1): s = int(sys.stdin.readline()) values = list(map(int, sys.stdin.readline().split())) t[i] = s pre_sum = [0] * (s + 1) suf_sum = [0] * (s + 1) for j in range(1, s+1): pre_sum[j] = pre_sum[j-1] + values[j-1] for j in range(1, s+1): suf_sum[j] = suf_sum[j-1] + values[s - j] # 计算qu[i][k]:取k个瓷器的最大价值 qu = [0] * (s + 1) for k in range(0, s + 1): max_val = 0 for p in range(0, k + 1): if p > s or (k - p) > s: continue current = pre_sum[p] + (suf_sum[k - p] - pre_sum[s - (k - p)]) if current > max_val: max_val = current # 比较pre_sum[k]和suf_sum[k] max_val = max(max_val, pre_sum[k], suf_sum[k]) qu[k] = max_val a[i] = qu # 初始化动态规划数组 dp = [ [0]*(m+1) for _ in range(n+1)] for i in range(1, n+1): for j in range(0, m+1): for k in range(0, min(t[i], j) + 1): if j - k >= 0: if dp[i-1][j - k] + a[i][k] > dp[i][j]: dp[i][j] = dp[i-1][j - k] + a[i][k] print(dp[n][m])if __name__ == "__main__": main()
代码解释
通过这种方法,我们可以在合理的时间内找到最大价值的解决方案。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月11日 19时33分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java判断字符串是否为金额
2019-03-04
软件架构-zookeeper快速入门
2019-03-04
angr学习笔记(7)(malloc地址单元符号化)
2019-03-04
「CF149D」括号涂色 区间DP好题
2019-03-04
树状数组 模板总结
2019-03-04
「NOI2015」程序自动分析 并查集题解
2019-03-04
[JSOI2008]Blue Mary的战役地图 Hash题解
2019-03-04
结构型设计在工作中的一些经验总结
2019-03-04
如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!
2019-03-04
2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态
2019-03-04
Netty4服务端入门代码示例
2019-03-04
MyBatis自定义类型转换器
2019-03-04
Python:面向对象
2019-03-04
Spring源码:prepareBeanFactory(beanFactory);方法
2019-03-04
AcWing 828. 模拟栈
2019-03-04
(20200328已解决)从docker容器内复制文件到宿主机
2019-03-04
理解Docker ulimit参数
2019-03-04
OpenAI Gym简介及初级实例
2019-03-04
int 转 CString
2019-03-04
Edit编辑框自动换行与长度
2019-03-04