描述
题解
这个题竟然是积分,第一次遇见积分的问题……好题。
题解我就懒得写了,因为我也是半懂半懵逼状态,给大家一个极其详尽的题解链接,我佐学姐的题解,可以在我的博客左边找到我学姐的博客,里面的博客都是十分详细的题解,(学姐出品,必为精品),当然,懒得话直接点 这里。
没毛病,就这样吧~~~我有一份十分好的求积分的模版, 自适应 simpson 积分 ,我想,你一定可以在我的模板中找到。希望对你们有用……
代码
#include <iostream>
using namespace std;
const int MAXN = 22;
int x, y;
double a[] = {2, 0, 1};
double b[] = {2, 1, -1};
double dp[MAXN][MAXN][MAXN << 1];
void get_dp(int x, int y, double z[], double w[])
{
dp[x][y][0] = max(dp[x][y][0], z[0] + w[0] - 1);
for (int i = 1; i <= z[0]; i++)
{
for (int j = 1; j <= w[0]; j++)
{
dp[x][y][i + j - 1] += z[i] * w[j];
}
}
}
double get_res(int x, int y)
{
double ret = 0;
for (int i = 1; i <= dp[x][y][0]; i++)
{
ret += dp[x][y][i] / i;
}
return ret;
}
int main()
{
scanf("%d%d", &x, &y);
dp[0][0][0] = dp[0][0][1] = 1;
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
if (i > 0)
{
get_dp(i, j, dp[i - 1][j], b);
}
if (j > 0)
{
get_dp(i, j, dp[i][j - 1], a);
}
}
}
double res = 0;
for (int i = 0; i < y; i++)
{
get_dp(i, x, dp[i][x - 1], a);
res += get_res(i, x) * x;
}
for (int i = 0; i < x; i++)
{
get_dp(y, i, dp[y - 1][i], b);
res += get_res(y, i) * i;
}
printf("%f\n", res);
return 0;
}