估分:60+100+30=190
实际得分:60+100+0=160
还不错。
T1:完全背包(backpack)
矩阵max??
还是贪心??
果断打了个60分暴力。
按照NOIP的惯例,此题是一道送分题。
对于 60% 的数据,我们可以发现其实 n 100 ,若两种物品 i a 相同, 则 i b 较小的应该被舍弃,复杂度 O(am)。
对于 100% 的数据,我们先证明一个引理: 引理:给定任意 n 个整数,它们之中存在若干个整数的和为 n 的 倍数。
证明:设 n 个整数为 1 a , 2 a , 3 a , , n a , = = n i Sn ai 1 。
对于 0 S , S1 , 2 S , 3 S , , n S 这 n +1 个数,至少有两个数模 n 相同,则 这两个数的差为 n 的倍数,
证毕。
回到题目,设第 s 种物品为性价比最高的物品之中 i a 最小的物 品。设最优情况下有 x 件非第 s 种物品,则我们可以证明: 定理:存在一种最优情况使得 x s a 。 证明:若 x s a ,则存在若干件物品的 i a 和为 s a 的倍数,将这些物 品用第 s 种物品替换一定不劣。 于是这 x 件非第 s 种物品的 i a 和最大为 s 100a 。于是我们选择 −100s a n 件第 s 种物品,剩下的空间做完全背包,复杂度 ( a^3)
T2:6308. 中间值
第一眼:
原题。
梁正昊老师讲的分治专题里收录了此题。
大致思想是每次取两个区间的一半与k进行比较,去除不可能的区间,缩小问题的规模。
时间复杂度O(m log n)
T3:6306. Sequence
以为能拿30分,但没想到将上一题的代码COPY下来直接用导致前一题的数组没有删掉而MLE了。
10分就暴力。
30分原来也要打个积性筛。
满分做法就是发现f其实也是一个积性函数,因此将所有f(p^c)筛出来即可。
完全积性函数:
对于所有a、b,有:f(a*b)=f(a)*f(b)
积性函数:
对于互质的a、b,有:f(a*b)=f(a)*f(b)
常见积性函数:欧拉函数,约数个数,约数和以及gcd等
今天拍了一次,差点拍死我了,到底是如何出1000组数据还要在上面跑两个程序,再跑一个对比是否有差异的?
简单的专题去有大大的好处,真可惜那些没去听的。
看来读入优化还是很有用的。。。
继续加油。