https://projecteuler.net/problem=503
const int N = int(1e6) + 9;
int n = 1000000;
DB f[N];
// randomly choosing i elements from n elements,
// the expectation of the j-th element.
DB e(int i, int j){
return (DB)(n+1) / (i+1) * j;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("/users/xiaodao/desktop/Exercise/in.txt", "r", stdin);
//freopen("/users/xiaodao/desktop/Exercise/out.txt", "w", stdout);
#endif
f[n] = (n + 1.0) / 2;
int up = n - 1;
DWN(i, n, 1){
// in i-th round, we get j-th,
// we enumerate the cut-off point: k,
// that is, if j <= k, we stop.
f[i] = f[i + 1]; // if k=0
DB prob = 1, expe = 0;
// the prob we don't stop ..
// the expe if we stop.
REP_1_C(k, up){
expe += 1.0 / i * e(i, k); if (expe >= f[i]) break;
prob -= 1.0 / i;
if (expe + prob * f[i+1] < f[i]){
f[i] = expe + prob * f[i+1];
up = k;
}
}
}
printf("%.10f\n", f[1]);
}
// 3.8694550145




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
