CF Playrix Codescapes Cup Problems Analysis

本文探讨了多种算法优化策略,包括排序、动态规划等方法,并通过具体案例解析如何有效降低时间复杂度,实现高效算法。

A 理清思路模拟

B 先对3个array排序,然后每次从某个array的头删数,可保证每个数必被处理1次,O(n log n) (set维护也行)

C 分3类情况讨论,一种为: p1≤p2 && p1 + p2≤c,先排序维护前缀与Pre2(根据下标的prefix),枚举p2,剩余c-p2,

  若p2*2>c,p1为prefix[c-p2];若p2*2<=c,p1=Pre2[i-1]

  还有一种tourist的写法:只根据下标维护prefix,对于p2,找到最大的p1(p1+p2<=c),再满足p1<=p2的条件即可!!!

  反正要做到补充不漏地统计

D (想到2^34的做法后没有考虑到2可以特判,虽然有些想法但是没有坚持想下去QAQ,其实挺simple的)

注意审题,只要能把另一个rectangle放进去即可,没有规定哪个方向,即不要求按照顺序对应

//以前一道noip模拟题,也是分析题目性质,降数据范围

把所给的n个数字从大到小排; 
显然同样是选一个数字,选大的数字肯定比较优; 
问题只是要让哪一条边乘上它; 
这里可以知道 
如果全都是2的话 
最多需要34个数字; 
因为log2(100000)≈17 
然后两条边都最多需要17个数字乘; 
所以是34个数字; 
但要给34个数字配的话; 
复杂度是2^34;这是不合适的; 
但是注意到; 
如果从某一位开始之后,都是2; 
那么就不存在分配问题了; 
即分配给谁都是一样的了,因为都是乘2了; 
而之前都是大于2的;也就是至少为3; 
而log3(100000)≈11 
也就是说等于2的数字所花费的时间可以近似忽略掉; 
直接while处理一下就好; 
而大于2的;最多22个; 
而2^22是可以接受的了,只有400W左右; 
写个dfs,从某一位开始如果变成2,后面就不再继续dfs,直接贪心能分配就分配; 

++++++++++++++++++++++++++++++++++++++++++++

当然,DP也可以,预处理长宽至少分别扩大a、b倍。

对于每个expansion,dp[i]表示长扩展i倍时j的最大扩大倍数,每次看是否dp[a]==b

方程:每个expansion只应用于长或宽,得之。

转载于:https://www.cnblogs.com/supy/p/6869514.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值