コード
#include <iostream>
#include <vector>
#include <cassert>
#include <iomanip>
using namespace std;
class BagOfMice{
public:
int w_, b_;
vector<vector<vector<double> > > prob;
BagOfMice(int w, int b) : w_(w), b_(b){
prob.resize(2, vector<vector<double> >(w+1, vector<double>(b+1, -1)));
for(int i = 0; i <= w; i++){
prob[0][i][0] = 1;
prob[1][i][0] = 0;
if(b>=1)prob[1][i][1] = 1.0 / (i+1);
}
for(int i = 0; i <= b; i++){
prob[0][0][i] = 0;
prob[1][0][i] = 0;
}
}
double get_prob(){
for(int b = 1; b <= b_; ++b){
for(int w = 1; w <= w_; ++w){
double dw(w), db(b);
prob[0][w][b] = dw / (dw + db) + db / (dw + db) * prob[1][w][b-1];
if(b!=1){
prob[1][w][b] = db / (dw + db) * (dw/(dw+db-1) * prob[0][w-1][b-1] +
(db-1)/(dw+db-1) * prob[0][w][b-2]);
}
}
}
return prob[0][w_][b_];
}
};
int main(int argc, char *argv[]){
int w, b;
cin >> w >> b;
BagOfMice x(w, b);
cout << setprecision(10) << x.get_prob() << endl;
return 0;
}