题目描述
给出
,输出杨辉三角的前
行。
如果你不知道什么是杨辉三角,可以观察样例找找规律。
输入输出样例
输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
题解
来一发递推题解,直接DP。
1定义状态:
为第
行第
列的杨辉三角的数。
2状态转移:
(1)列出杨辉三角的二维数组形式,以
为例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
(2)由图可见,状态转移方程为:
。
(3)边界条件很显然是:当
时,
。
3.上代码:
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 55; //个人习惯
ll f[N][N];
void init() {
for(int i = 1;i < N; i++) {
for(int j = 1;j <= i; ++j) {
if(j == 1) {
f[i][j] = 1;
} //边界条件
else {
f[i][j] = f[i - 1][j - 1] + f[i - 1][j]; //状态转移方程
}
}
}
}
int main () {
init();
int n;
cin >> n;
for(int i = 1;i <= n; i++) {
for(int j = 1; j <= i; j++) {
cout << f[i][j] << ' ';
}
cout << '\n';
} //输出
return 0;
}