455A Boredom Problem - 455A - Codeforces
给定一个有 n 个元素的序列 {an}。你可以做若干次操作。在一次操作中我们可以取出一个数(假设他为 x)并删除它,同时删除所有的序列中值为 x+1 和 x−1 的数。这一步操作会给玩家加上 x 分。
思路
dp题,先按升序排序,统计每个ai的出现次数,并去重。
从左往右看,如果x被选上,那么x-1一定没被选上,x+1无法被选上
由此可以推出dp思路:dp[i]=max(dp[i-1],dp[i-2]+a[i]*cnt[i])
489C Given Length and Sum of Digits... Problem - 489C - Codeforces
给出 m 和 s,分别找出最大和最小的非负整数,两个数都满足数位长度为 m,数位和为 s。无解时输出 −1。 1≤m≤100, 0≤s≤900
思路
贪心,不可满足的条件是s>9*m和s==0&&m!=1
对于可满足情况
最大值:从左向右,尽量放大的 最小值:如果m!=1 第一位放1,后面的只要 (m-1)*9>s-x,就放x
可以通过数组储存每位数
279B Books Problem - 279B - Codeforces
你有 n 本书,读第 i 本书需要 ai 分钟,你现在有 m 分钟
你读书的方式是这样的:找出任意一个数 x,并按编号从小到大的顺序读第 x∼n 本
如果你读完了第 n 本,那么读书结束
如果你准备要读第 i 本书,但是剩下的时间小于 ai(也就是读不完这本书):那么你就不可以开始读这本书了,并且读书结束
换句话说,如果你读一本书,就必须要读完,否则就不能读
求最多能读多少本书
思路
滑动窗口--双指针
维护窗口[l,r],保证窗口内的总和<=t