NOI Online #1入门组详细题解

本文深入解析三道竞赛编程题目,涵盖高效剪枝暴力算法、根号分治优化DP及矩阵乘法加速DP等技巧,旨在提升算法理解和实现能力。

文章目录

Solution

T1

考虑 O ( n 2 ) O(n^2) O(n2)暴力: 枚举 a , b a,b a,b,然后求出对应的 c c c,更新答案。

这种做法会T掉。虽然我们可以将时间复杂度优化到 O ( n ) O(n) O(n),可事实上暴力大力剪枝+卡常就能过。

①对于一个 a a a,我们将 b b b先从 0 − 3 0-3 03枚举一遍,如果这些 b b b都不行,那么这个 a a a就不行了;直接break;

②得到一个 c c c的特解后,每次将 c c c 4 4 4而不是加 1 1 1,这样可以保证对于每一个 c c c,都存在一个自然数 b b b


③把;改成;

④在循环的 i n t int int前加上个 r e g i s t e r register register

⑤不要开 l o n g   l o n g long\ long long long

于是这样不开O2都能过。

T2

裸的超纲整数拆分问题。

首先,我们考虑 d p dp dp d p dp dp有两种做法:

①无限背包(以 1 − n 1-n 1n中每一个数为一个物品,价值均为 1 1 1,背包容量为 n n n且必须装满)
②另外一种 d p dp dp
状态设计: d p i , j : dp_{i,j}: dpi,j: 目前选了 i i i个数,和为 j j j
状态转移: d p i , j = d p i , j − i + d p i − 1 , j − 1 dp_{i,j}=dp_{i,j-i}+dp_{i-1,j-1} dpi,j=dpi,ji+dpi1,j1
这个状态转移式是什么意思呢? d p i , j − i dp_{i,j-i} dpi,ji可以认为是将 d p i , j − i dp_{i,j-i} dpi,ji表示的序列的所有数加 1 1 1 d p i − 1 , j − 1 dp_{i-1,j-1} dpi1,j1表示将 d p i − 1 , j − 1 dp_{i-1,j-1} dpi1,j1所表示的序列最后面多上一个 1 1 1。相当于我们可以将一个序列全局加 1 1 1,或者在最后面添上一个 1 1 1,显然这个序列一直是有序的。

这两种 d p dp dp都是 O ( n 2 ) O(n^2) O(n2)的。它们各有所长——
①假设物品的数量为

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值