摘要: 一道简单的求解最长上升子序列的问题。感觉这道题的巧妙之处就是在查找最长上升子序列的时候用到了变形的二分查找。很是巧妙,因为一般的找上升子序列的方法,用于这道题是超时的。巧妙的代码为: else { int l=1; int h=max; while(l<=h) { int mid=(l+h)/2; if(flag[mid]>a[i].r) ... 阅读全文
posted @ 2011-11-27 21:55 AC_Girl 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 一开始我还在那里想用组合公式做,就是把所有的从连续为M 到N 所有的可能都写一下,可是根本都不行。一个是数太大,一个是情况太多了。今天看见AV_VON的解题报告,原来,原来是DP啊 我们根据他的数据要求开一个数组,大小为2001, dp[2001]。这个数组用来存放子问题的解,比如dp[i]就代表投完第i个硬币时,已有连续m个正面的概率。具体假如m是2,dp[0],dp[1]肯定0,因为投币0次或1次不可能出现连续两次正面。分三种情况讨论:1. n小于m,即dp数组下标i要小于m的时候,概率值都为0,原因如上所述。2. 下标i等于m,也就是说n等m,投多少次刚好多少次是正面,这个概率是0.5的 阅读全文
posted @ 2011-11-27 21:50 AC_Girl 阅读(174) 评论(0) 推荐(0) 编辑