后三题:
T1_Description:
在当期拥有的集合s中,假设集合里的某一数A,使得集合里的其他数不比A的“风景”好(风景为每个数所拥有的两个权值,当A的两个权值大于B的两个权值则A比B的风景好)则每次找出当前集合里的所有“A”,并标记一下找到他时是第几类(也就是第几次),并把A从集合中去掉,以此类推,直到集合为空为止。
一般的算法,超时.
如何优化?
我们保存一个数组,每次储存第i类的最大值.
那么对于第k个数,只要看看是否比每一类的最大值大,如果大的话就证明第k个数是属于这一类的,且更新这一类的最大值,但如果没有的话,则需要多加一类.
效率,接近O(n).
T2_Description:
一个长度为n的数字串,删除M个数,使得剩下的数所组成的数最小。
这题只告诉了我一个道理,字符串很慢.
好咯,字符串怎么做就改成数组吧.
可以用模拟链表或者标记选过的数.
T3_Description:
01背包+完全背包+分组背包.
这里需要注意的是:
要对01背包和完全背包做完一遍之后,再做分组背包。
收获:
不管是对于什么背包,只要他只能选一次的,那么就是从vdownto 0,否则就是0tov!