你有一把宝剑。每使用一个宝石,有50%的概率会成功让宝剑升一级,50%的概率会失败。 如果宝剑的级数大于等于5的话,那么失败会使得宝剑降1级。如果宝剑的级数小于5的话, 失败没有效果。问题是:期望用多少个宝石可以让一把1级的宝剑升到9级?
i<5 : dp[i] + 1 = 0.5 * dp[i+1] + 0.5 * dp[i]
i >= 5: dp[i] + 1 = 0.5 * dp[i-1] + 0.5 * dp[i+1]
void solve(int n ) {
int dp[n+1];
dp[1] = 0;
for (int i = 2; i <= n; i++) {
if (i <= 5) {
dp[i] = dp[i-1] + 2;
} else {
dp[i] = 2 * dp[i-1] + 2 - dp[i-2];
}
printf( "dp[%d]=%d\n", i, dp[i] );
}
}
int main(int argc, char *argv[]) {
// freopen("A.txt", "r", stdin);
solve(11);
return 0;
}