天天看点

概率题 宝剑升级需要多少宝石

你有一把宝剑。每使用一个宝石,有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;
}
           

继续阅读