摘要: 先预处理,把第i个村子到第j个村子中,建一个邮局的最小代价算出来,存在min_cost[i][j]里。
接下来就可以DP。设f[i][j]为前i个邮局,建在前j个村子的最小代价。那么f[i][j]可以转移到f[i + 1][j + k],(1 <= k 且 j + k <= n),代价是min_cost[j + 1][j + k]。
阅读全文
摘要: 简单题。很早以前做的。贴一下凌乱的代码。
阅读全文
摘要: 简单的记忆化搜索。很早以前做的,代码风格很乱。将就一下啦。
阅读全文
摘要: 楼爷的题。递推。f[n]表示n个结点的连通图个数,则有递推公式:
void calc(int n)
{
f[n] = 0;
for (int i = 1; i < n; i++)
f[n] += f[i] * f[n - i] * (pow(i) - 1) * C(n - 2, i - 1);
//pow(x) == 2^x
}
因为数据较多,所以预先算出f[1] -- f[50],再输出。要用高精度。我用了标程。
阅读全文
摘要: 首先明确一点:最优解必为奶牛1..n-1轮流领跑,奶牛n撞线。且跑了x圈后,未领跑过的奶牛都耗费了x的体力。
设f[i][j][k]表示前i-1头奶牛已领跑,现在由第i头奶牛领跑,一共跑了j圈,奶牛i耗费了k的体力。
则f[i][j][k]可以转移到f[i][j + p][k + p^2](耗费1分钟,奶牛i以p圈/分钟的速度继续领跑),也可转移到f[i + 1][j][j](换成奶牛i + 1领跑,不耗费时间)。
时间复杂度为O(nde^2.5)。
阅读全文
摘要: 感兴趣的进去慢慢看吧。
阅读全文
摘要: 推荐此题。基础树型DP。
f[x][i](1 <= i <= p)表示以x为根的子树,变成剩下i个点的子树,且剩余子树包含根结点,需要去掉的最少边数。
那么父结点的f值可以由它所有的儿子的f值做背包得到。
最后的答案是min(min(f[i][p]) + 1 (2 <= i <= n), f[1][p])
阅读全文
摘要: 强烈推荐此题。树型DP。
分析较长且带有图示,请阅读全文。
阅读全文
摘要: 妹妹说,难题得留着哥哥慢慢解,总会AC的。
听着心里很是受用呢。
阅读全文
摘要: 强烈推荐此题。图论和DP结合。
分析较长,请阅读全文。
阅读全文