首页 > 其他分享 >2024.8.14 DP Round 2

2024.8.14 DP Round 2

时间:2024-08-15 15:39:49浏览次数:10  
标签:cnt le 14 2024.8 矩阵 果盘 多样性 rm DP

A.store

Statement:

有 \(n(1 \le n \le 100)\) 个果盘,其中第 \(i\) 个果盘有 \(a_i\) 个水果,容量是 \(b_i(a_i \le b_i \le 100)\)。一次操作可以将一个水果从一个果盘放到另一个果盘中,现在要将所有水果放到最少的盘子中,问最少要用多少盘子以及最少需要多少操作。

Solution:

第一问容易贪心算出。注意到值域很小,于是直接设 \(f_{i, j, k}\) 是考虑前 \(i\) 个果盘,选了 \(j\) 个果盘作为最后有水果的果盘时,以及还剩 \(k\) 个可以放置的水果,然后就做完了。

B.huffman

Statement:

按字典序顺序给出 \(n(1 \le n \le 500)\) 个字符串,第 \(i\) 个字符串出现的次数是 \(a_i\),现在你要将他们每个分别映射到一个 \(k(1 \le k \le 60)\) 进制的字符串,满足:

  • 没有任意一个映射后的字符串是另一个映射后的字符串的前缀。

  • 映射后的字符串的字典序顺序必须与原来的字符串顺序一致。

  • \(\sum_{i = 1}^n {len_i a_i}\) 最小,其中 \(len_i\) 是字符串映射后的长度。

Solution:

注意到由于字典序顺序不变,于是一个区间 \([l, r]\) 最后的形态一定是 \([1, 1, 2, 2, ...,k - 1, k, k]\)。即会被分为至多 \(k\) 个单调不降的连续区间。于是考虑区间 \(\rm DP\),设 \(f_{l, r, cnt}\) 是将区间 \([l, r]\) 分为至多 \(cnt\) 个区间最小的 \(\sum len_ia_i\),其中 \(f_{l, r, 1}\) 是 \([l, r]\) 区间分为“一个”区间最小的代价,这个东西的定义非常令人不解,但是我们可以在 \(cnt > 1\) 的状态转移方程中得到。

考虑如何转移:

  • \(cnt > 1\): \(f_{l, r, cnt} = \min_{k = l}^{r - 1} f_{l, k, 1} + f_{k + 1, r, cnt - 1}\)

  • \(cnt = 1\): \(f_{l, r, 1} = f_{l, r, cnt} + \sum_{i = l}^r a_i\)

于是得到了一个 \(O(n^3k)\) 的做法(其实拿到树上更好理解,但是我在想的时候还是用的区间)。

先讲正解,注意到分割的方式是 \(1, k - 1\),其实我们可以利用倍增的思想分为 \(k / 2, k - k / 2\) 的区间,预处理出需要计算的区间,于是可以在 \(O(n^3 \log k)\) 的时间做了。

接下来讲如何卡常:

  1. 手写 \(\min/\max\):\(\rm STL\) 中的 \(\min/\max\) 是很慢的,大概可以快个 \(0.5s - 1.5s\) 左右

  2. 手动 \(\rm O3\):#pragma GCC optimize(3, "Ofast", "inline"),真的很快!!!

  3. 减少 \(\rm \text {cache miss}\):通过改变循环枚举顺序,使下标尽量连续,将 \(\rm cache\) 用到极致。

C.diversity

Statement:

给定一个 \(n \times m(1 \le n, m \le 200)\) 的矩阵,只由 # 和 . 组成。对于一个子矩阵,它的多样性定义为:

  • 假如这个矩阵的字符都一样,则该矩阵的多样性为 \(0\)。

  • 假设将这个矩阵从一条横线隔开成为两个子矩阵,设两个矩阵的多样性为 \(a, b\),则该矩阵的多样性为 \(\max(a, b) + 1\)。

  • 假设将这个矩阵从一条竖线隔开成为两个子矩阵,设两个矩阵的多样性为 \(a, b\),则该矩阵的多样性为 \(\max(a, b) + 1\).

Solution:

问整个矩阵的多样性为多少。

首先容易有一个 \(O(n^5)\) 的暴力 \(\rm DP\):设 \(f_{u, d, l, r}\) 是 \([u, d], [l, r]\) 这个矩阵的多样性,\(O(n)\) 枚举即可。

标签:cnt,le,14,2024.8,矩阵,果盘,多样性,rm,DP
From: https://www.cnblogs.com/little-corn/p/18360908

相关文章

  • 亮相2024 DPU&AI Networking创新大会,天翼云斩获两项大奖!
    近日,以“智驱网络芯动未来”为主题的2024DPU&AINetworking创新大会在北京举办。大会表彰了在DPU与AI网络技术创新及实践应用中取得卓越成就的单位与项目,天翼云科技有限公司荣膺创新引擎奖、《紫金DPU算力卸载与网络加速应用》荣获实践先锋奖,技术创新实力以及应用实践成果再获行......
  • day43-dynamic programming-part10-8.14
    tasksfortoday:1.300.最长递增子序列2.674.最长连续递增序列3.718.最长重复子数组--------------------------------------------------------------------------1.300.最长递增子序列Inthispractice,notethemeaningofthedplist:whichis:dp[i]signifi......
  • 【2024-08-14】重了两斤
    20:00重新审视自己对他人的负面想法通常会带来很大的解脱,因为根深蒂固的敌意会制造紧张和防御机制,这总是会耗费我们的精力,让我们陷入困扰和痛苦之中。                                       ......
  • 【LeetCode:3148】矩阵中的最大得分(Java)
    题目链接3148.矩阵中的最大得分题目描述给你一个由正整数组成、大小为mxn的矩阵grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为c1的单元格移动到值为c2的单元格的得分为c2-c1。你可以从任一单元格开始......
  • udp和arp之间的交互作用
    udp和arp之间的交互作用arp-a验证arp告诉缓存是空的sock-u-i-nl-w8192svr4discard1.在第一个arp应答返回以前,总共产生了6个arp请求。2.在接收到第一个arp应答时(第7行),只发送最后一个数据报片(第9行)3.在大多数的现实中,在等待一个arp应答时,只将最后一个报文发送给特定目标......
  • udp介绍
    1.udp介绍udp是一个简单的面向数据报的运输层协议,进程的每个输出操作都正好产生一个udp数据报,并组装成一份待发送的ip数据包,这与面向流字符的协议不同,如tcp,应用程序产生的全体数据与真正发送的单个ip数据报可能没有什么联系。udp不提供可靠性:它把应用程序传给ip层的数据发送出......
  • 「Day 9 & 10—DP问题」
    DP问题定义什么是\(DP\),答曰:一种通过将全局问题分解成不同的子问题来进行对复杂问题的计算。在我看来就是一种递推的\(ProMax\)版,依旧是用之前计算过的来推出现在要计算的。DP板子问题P1115最大子段和思路我们用\(dp\)数组来定义到\(i\)为止,最大的子段和,那么我们......
  • 2024.8.14 总结(集训)
    依然是TQX来讲字符串。/bx/bx/bx属于是两个上午速通字符串里一些重要的内容。上课时只有manacher和PAM是我有点听懂了的。于是下午看TQX的博客学了PAM,看之前看过的博客复习了下SAM,给why讲了些、和他讨论了PAM,AC了洛谷上的PAM板子,看TQX的PPT学了manache......
  • 2024.8.14 test
    A一棵树,你每天可以选择不超过\(m\)个祖先都被选择的点,问最少多少天选完。\(n\le10^5\)。考虑贪心,每次选出子树深度最大的\(m\)个点或子树大小最大的\(m\)个点都是对的。B一棵树\(n\le5e5\),选若干出来,对于每个点,如果其儿子有选,那么不能被选,否则其有\(p_u\)概率被选......
  • 8.14 PTA练习
    3-11求一元二次方程的根本题目要求一元二次方程ax2+bx+c=0的根,结果保留2位小数。(注意:0.00会在gcc下被输出为-0.00,需要做特殊处理,输出正确的0.00。)输入格式:输入在一行中给出3个浮点系数a、b、c,中间用空格分开。输出格式:根据系数情况,输出不同结果:1)如果方程有两个不相等的......