[SCOI2012]滑雪与时间胶囊

[cqoi2013]二进制a+b

YYY posted @ 2015年8月08日 00:34 in 算法竞赛 with tags DP , 578 阅读
_THIS_IS_START_OF_ARTICLE_
这道题蛮有意思的..
可以考虑DP,这样来设计状态:
f(ma,mb,mc,n,q)表示a用了ma个1,b用了mb个1,c用了mc个1,当前到第n位,q∈{0,1}表示是否有进位
然后只需枚举当前位a取0,b取0、a取1,b取1、a取1,b取0这三种情况,根据q来判断mc需要增加多少和答案需要增加多少
 
最后的答案就是f(na,nb,nc,len,0),na是a中1的个数,nb是b中1的个数,nc是c中1的个数,len是最长的数的长度
这里q一定要取0是因为,当我们得到一个状态时,若q等于1,那么n是比实际上的长度少1的,因为当前位(也就是需要枚举的这一位,也就是n+1位)有一个1.
至于转移么,我写了个SPFA转移(而且写慢了..懒得改了..),应该有更好的转移方式(SPFA转移写了整整4K..)
那么完整代码如下:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
_THIS_IS_END_OF_ARTICLE_

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter