方法:递推
解析:
先观察数据范围,乍一看好小,觉得可能是某种神的做法?
然后再考虑手玩一下。
发现三维及以上的都玩不了啊
只能玩1,2维。
然后看1维时,是这样的。
1,2,4,6,8,10…
即m=0时(我知道题里没有m=0)为1,m=1时为2….
二维呢?这不是刚学递推的时候的一个SB题么。
1,2,4,8,14,22….
然后呢?
观察表啊!
二维有一个地方是8,而1维是6。
因为二进制表示只有2^x这么多种。
所以猜测整个表是这样的
1,2,4…
1,2,4,8…
1,2,4,8,16….
…
那其他的部分呢?
不会啊,这怎么办。
继续观察表啊!
我们发现14=6+8,22=8+14。
所以猜测表中的每一个值都是其左边的值加上左上的值。
这为什么对?我不会啊。
但是我断言这道题一定是这么找规律的- -
我这个二维生物也只能靠1,2维找规律了。。。
所以直接上递推,居然A了,人生无憾啊。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 110
#define N 20
using namespace std;
typedef long long ll;
int m,n;
ll f[N][M];
int main()
{
scanf("%d%d",&m,&n);
f[1][0]=1;
for(int i=1;i<=m;i++)
{
f[1][i]=i*2;
}
for(int i=2;i<=n;i++)
{
f[i][0]=1;
for(int j=1;j<=m;j++)
{
f[i][j]=f[i-1][j-1]+f[i][j-1];
}
}
printf("%lld\n",f[n][m]);
}