摘要:
题意:给出一个n面的色子,问看到每个面的投掷次数期望是多少。 析:这个题很水啊,就是他解释样例解释的太。。。我鄙视他,,,,, dp[i] 表示 已经看到 i 面的期望是多少,然后两种选择一种是看到新的一面,另一种是看到旧的一面,然后就很出答案了。 代码如下: 阅读全文
摘要:
题意:给定一个人抢劫每个银行的被抓的概率和该银行的钱数,问你在他在不被抓的情况下,能抢劫的最多数量。 析:01背包,用钱数作背包容量,dp[j] = max(dp[j], dp[j-a[i] * (1.0 - pp[i])),dp[i] 表示不被抓的最大概率,在能抢劫到 i 个钱。 代码如下: 阅读全文
摘要:
题意:给定一个数 n,然后每次除以他的一个因数,如果除到1则结束,问期望是多少。 析:概率DP,可以用记忆公搜索来做,dp[i] = 1/m*sum(dp[j] + 1) + 1/m * (dp[i] + 1) ==> dp[i] = (sum(dp[j]) + m) / (m-1)。其中m是因数个 阅读全文
摘要:
题意:你面前有 n 个门,每次你可以选择任意一个进去,如果xi是正数,你将在xi后出去,如果xi是负数,那么xi后你将回来并且丢失所有记忆,问你出去的期望。 析:两种情况,第一种是直接出去,期望就是 1/n * xi 第二种是回来了,再出去 1/n*(-xi+E), 然后就可以得到 E = sum 阅读全文
摘要:
题意:给定上一个串,让你在后面添加一些字符,使得这个串成为一个回文串。 析:先用manacher算法进行处理如果发现有字符匹配超过最长的了,结束匹配,答案就是该字符前面那个长度加上该串原来的长度。 代码如下: 阅读全文
摘要:
//输入,并处理得到字符串s int p[1000], mx = 0, id = 0; memset(p, 0, sizeof(p)); for (i = 1; s[i] != '\0'; i++) { p[i] = mx > i ? min(p[2*id-i], mx-i) : 1; while (s[i + p[i]] == s[i - p[i]]) p[i]++; ... 阅读全文