题解 P5732 【【深基5.习7】杨辉三角】

题目描述

给出 n ( n 20 ) n(n≤20) ,输出杨辉三角的前 n n 行。
如果你不知道什么是杨辉三角,可以观察样例找找规律。

输入输出样例

输入样例:

6

输出样例:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

题解

来一发递推题解,直接DP。

1定义状态 f [ i ] [ j ] f[i][j] 为第 i i 行第 j j 列的杨辉三角的数。
2状态转移
(1)列出杨辉三角的二维数组形式,以 n = 5 n=5 为例:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

(2)由图可见,状态转移方程为: f [ i ] [ j ] = f [ i 1 ] [ j 1 ] + f [ i 1 ] [ j ] f[i][j]=f[i−1][j−1]+f[i−1][j]
(3)边界条件很显然是:当 j = 0 j=0 时, f [ i ] [ j ] = 1 f[i][j]=1
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;
}
发布了4 篇原创文章 · 获赞 1 · 访问量 42

猜你喜欢

转载自blog.csdn.net/live_now/article/details/104994980