#include <bits/stdc++.h>
using i64 = long long;
const double inf = std::numeric_limits<double>::max();
int main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
std::cout << std::fixed << std::setprecision(12) << "\n";
int n, m;
std::cin >> n >> m;
std::vector<double> f(m + 1, inf), g;
f[0] = 0;
for (int i = 0; i < n; ++i) {
g.assign(m + 1, inf);
for (int j = 0; j <= m; ++j) {
for (int k = 1; k * (n - i) + j <= m; ++k) {
g[j + k] = std::min(g[j + k], f[j] + 1.0 * j / k);
}
}
std::swap(f, g);
}
std::cout << n + 2 * f[m] << '\n';
return 0;
}
174. Dungeon Game | 127. Word Ladder |
123. Best Time to Buy and Sell Stock III | 85. Maximal Rectangle |
84. Largest Rectangle in Histogram | 60. Permutation Sequence |
42. Trapping Rain Water | 32. Longest Valid Parentheses |
Cutting a material | Bubble Sort |
Number of triangles | AND path in a binary tree |
Factorial equations | Removal of vertices |
Happy segments | Cyclic shifts |
Zoos | Build a graph |
Almost correct bracket sequence | Count of integers |
Differences of the permutations | Doctor's Secret |
Back to School | I am Easy |
Teddy and Tweety | Partitioning binary strings |
Special sets | Smallest chosen word |
Going to office | Color the boxes |