摘要: 题目链接:http://poj.org/problem?id=1322 比较水的DP,只是精度有点坑。f[i][j]表示放置i次后,桌子上有j个chocolate的概率。显然,f[i][j]=sum{f[i-1][j-1]*(c-j+1)/c+f[i-1][j+1]*(j+1)/c};但是如果不优化,会超时,注意到f方程式随着i的增大是收敛的,所以当n很大时,只要计算前面就可以了,大概1000足够。我做的时候是比较精度fbs(f[i][j]-f[i][j-2])<esp,这样求出来c=100时,大概只要500次,但WA了,证明还是不足够收敛。显然这里还可以用滚动数组优化。 1 //STA 阅读全文
posted @ 2013-03-01 23:24 zhsl 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3254 状态压缩,用01分别表示pasture不能plant和能plant。转移方程:f[k][i]=sum{f[k-1][j] | j是能满足i的状体,不产生冲突},显然可以用滚动数组优化。 详细的转移方法(上一个的状态设为k,i为所在行数): 1,如果前一个pasture已被plant,那么下一个pasture必定不能plant,所以f[i][k&~(1<<j)]+=f[i-1][k]; 2,如果前一个pasture没有plant: a,下一个pasture不plant,那么f[i][k]+=f[... 阅读全文
posted @ 2013-03-01 13:23 zhsl 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2411 啪啦啪啦敲了80+行,1A。结果看Discuss,别人20行就解决了= =!,果然是我想复杂了。我的状态压缩效果不是很好,貌似很挫,因为状态考虑得太多了,没有类化,用了2bit的空间来表示每个格子的状态即当前放的是横向01,没放00,竖向11。而且状态转移的时候考虑的是从后面来判断前面的状态是否可行,这样的话每行就多记录了些状态(需要记录格子为空的情况)。 其实简单的做法就是从前一状态推向后一状态,用0表示当前格子放置了,1表示当前格子放置的是竖向的,而且是向下凸出的。状态转移方程:f[k][i]=sum{f[k-... 阅读全文
posted @ 2013-03-01 01:11 zhsl 阅读(1793) 评论(0) 推荐(1) 编辑