题目
解题思路
根据题意,我们可以发现答案是呈一定的规律递增,所以我们可以想到动态规划.
f [ i ] [ j ] f[i][j] f[i][j]表示第i行放j个的方案数,最后把f都统计一遍。
代码
#include <cstdio>
using namespace std;
char f[101][101][61]; short n; int k=60;
void add(char a[61],char b[61],char c[61])
{
int g=0;
for (int i=1;i<=60;i++)
a[i]=g+b[i]+c[i],g=a[i]/10,a[i]%=10;
}
int main(){
freopen("diagrams.in","r",stdin);
freopen("diagrams.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
f[i][0][1]=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
add(f[i][j],f[i-1][j],f[i][j-1]);
f[n][1][1]--;
for (int i=1;i<=n;i++)
add(f[n][i],f[n][i],f[n][i-1]);
while (!f[n][n][k]) k--;
for (int i=k;i>=1;i--) putchar(f[n][n][i]+48);
return 0;
}