Codeforces Round #208 (Div. 2) 赛后补题

这一场突发奇想的想先从C题开始做,C题果断不会,赛后发现题目看错了T_T

D题是裸DP,比赛时还是没写出来。

赛后问了kuangbin神的D题思路,挂了几遍后才自己敲出来了。


A. Dima and Continuous Line  

暴力判断两个圆是否相交。


B. Dima and Text Messages

先把n个单词串补成<3word1<3word2<3 ... wordn<3的形式。令其为s,令一个下标num为0.另一串为t,对串t从头到尾扫,如果遇到t[i]==s[num],就给num加1,最后看t串扫完时,s串对应的num是否等于其长度即可。如果相等,说明在t串中<3

<WORDi<3中的WORDi包含了wordi.


C. Dima and Containers

比赛时因为没看到and then empty all containers,所以做不出来。。。

贪心+模拟题。

这题我直接使用了stl里的stack,queue,deque来处理。

首先预处理在每个0之前的最大值,然后每次遇到非0数判断是不是0前的最大值且队列是否为空,是的话就入队列

如果不是则比较stack的最大值(栈顶)与deque的最大值(队首)中的最小值与x的大小关系

如果x小于最小值,则将x放入deque的队尾

如果最小值在deque且x大于该最小值,就把x放在队首

如果如果最小值在stack且x大于该最小值,就把x压入栈顶。

然后取出时直接判断非空即可(注意取出后容器要清空)。



D. Dima and Hares

dp[i][0]表示第i个位置在第i+1个位置之前被喂

dp[i][1]表示第i个位置在第i+1个位置之后被喂

所以dp[1][0]的值初始化为a[1],dp[1][1]的值初始化为b[1]

然后状态转移方程可以写为     

                                      dp[i][0]=max(dp[i-1][0]+b[i],dp[i-1][1]+a[i])

   括号里第一个表达式为先喂i-1,再喂i,再喂i+1          括号里第二个表达式为先喂i,再为i-1和i+1

                                      dp[i][1]=max(dp[i-1][0]+c[i],dp[i-1][1]+b[i])

   括号里第一个表达式为先喂i+1和i-1再喂i              括号里第二个表达式为先喂i+1,再喂i,再喂i-1

最后结果为max(dp[n-1][0]+b[n],dp[n-1][1]+a[n])(注意只有一个时需要特判)








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值