codejam 2008 practice problems

今年毕业,5月的codejam希望能够取得好点的成绩。


四个题https://code.google.com/codejam/contest/32003/dashboard


A Alien Numbers,进制转换,没啥好说的。

B Always Turn Left,走迷宫的模拟。如果往前走,当前位置左边有墙,往右走就是左边前边有墙。

记得迷宫的边界是有墙的,有的地方四面都没墙,上下,左右两块是共用一个墙的。


写这个的时候,本来打算用一个函数处理正着走和倒着走。但一懒,复制了一遍代码,没写成一个函数。结果,好几次改了一处,没改另一处。wa了好久。这样比赛的时候是肯定过不了的。


C Egg Drop,判断哪层鸡蛋摔碎。f(d,b)是算d,b已知时,最大的f的。有一个关系:

f(d,b)=f(d-1,b-1)+1+f(d-1.b)。假设第一次测试第x层,如果鸡蛋碎了,就用剩下的测试x下面的,这是第一项。如果没碎,就用剩下的测试x上面的,这是第三项。x自己也是1层。

算的时候,不能全部缓存,缓存d和b同事小于100的就行。

f(d,2)=(1+d)*d/2;

f(d,3)=d*(d-1)*(d+1)/6+d;

if(b==3&&d>4000)return -1;

if(b>32&&d>32)return -1;

if(b==d)return (1LL<<b)-1;


有了f(d,b)函数之后,二分查找d(f,b)和b(f,d)就行了。

D Shopping Plan,这个是看别人写的东西才做出来的。

是个动规,状态是 当前在那个位置×当前已经有的商品

需要一个a[1<<15][51]矩阵来缓存。详细递推http://stackoverflow.com/questions/4735387/can-someone-explain-one-of-the-algorithms-that-solves-this-google-code-jam-probl


发现用我笔记本跑大case 340s,用个快一些的电脑114s。看了比赛的时候必须用快的电脑了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值