1987924_ac_170ms_7912k.c

来自「北大大牛代码 1240道题的原代码 超级权威」· C语言 代码 · 共 62 行

C
62
字号
# include <stdio.h>
# define max(a,b) a>b?a:b

int a[1002][102][20];

void add(int m, int n, int x, int y)
{
	int l1, l2, w, i, l;

	w = 0;
	l1 = a[m][n][0];l2 = a[x][y][0];
	l = max(l1,l2);
	for(i = 1; i <= l; i++)
	{
		if(i > l1)
			a[m][n][i] = 0;
		if(i > l2)
			a[x][y][i] = 0;
		a[m][n][i]+=a[x][y][i]+w;
		w = a[m][n][i]/100;
		if(a[m][n][i]>=100)
			a[m][n][i]%=100;
	}
	if(w)
		a[m][n][++l] = w;
	a[m][n][0] = l;
}

int main()
{
	int i, j, m, N, K;
	
	scanf("%d%d",&N,&K);
	if(N < K)
		K = N;
	a[0][0][0] = a[0][0][1] = 1;
	for(i = 1; i <= N; i++)
		for(j = 1; j <= K; j++)
		{
			if(j==1)
			{
				a[i][j][0] = a[i][j][1] = 1;
				continue;
			}
			if(i < j)
				break;
			m = j;
			add(i,j,i,j-1);
			if(i-j<m)
				m = i-j;
			if(i-j)
				add(i,j,i-j,m);
			else
				add(i,j,0,0);
		}
	printf("%d",a[N][K][a[N][K][0]]);
	for(i = a[N][K][0]-1; i > 0; i--)
		printf("%02d",a[N][K][i]);
	printf("\n");
	return 1;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?