C - Tsundoku
题目描述:两个书桌:A和B。A书桌上有N本书,B书桌上有M本书。读A书桌上的第i本书需要a[i]分钟,读B书桌上的第i本书需要b[i]分钟。选择一个书桌,从最上面的书开始读,读完就放到最下面(至于是A的开头还是B的开头,无所谓,可以交叉)。
最多给你k分钟,按照这样的规则拿书,最多可以拿多少本书?
样例解释:
3 4 240 //A上有三本,B上有4本,一共给你240分钟
60 90 120//a[]
80 150 80 150//b[]
3
第一次:读A最上面的书,用了a[1]=60分钟,然后把它拿到最下面
第二次:读B最上面的书,用了b[1]=80分钟,然后把它拿到最下面
第三次:读A现在最上面的书,用了a[2]=90分钟,然后拿到最下面。
三次一共用了230分钟,剩下10分钟就什么也读不了。
思路:首先全部枚举是肯定会超时的,这题也不用DP,而且贪心是会有反例的
解法是二分+前缀和
我们将A书桌看成a数组,B书桌看成b数组。无论你怎样挑选书,最后在a数组挑出了的肯定是开头连续的一段,b也是如此,这样我们就可以求前缀和。
小手i指到a数组的某一个位置,我们就求到a[i]为止的前缀和pre(a[i])ÿ