UVA 11040 Add bricks in the wall(线性组合)

砖块上的数字最终都可以看作是最后一行的线性组合,独立变元最多9个。

这类题的一般做法,线性组合都可以列出方程然后高斯消元。

对于这道题,只要确定最后一行剩下的4个变量就好了,对于最后一行的j位置,它对上面位置某个数字的和贡献次数

等于它到那个位置路径的方案数,可以发现就是杨辉三角。倒数第二行的数已经足够确定剩下的变量,x到对应位置y的方案是2。

x = (y - xleft - xright)/2.

/*********************************************************
*      --------------Crispr---------------               *
*   author AbyssalFish                                   *
**********************************************************/
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

int b[9][9];

//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int T, i, j; scanf("%d",&T);
    while(T--){
        for(i = 6; i--;) scanf("%*d");
        for(i = 0; i < 7; i += 2) scanf("%d",b[6]+i);
        for(i = 0; i < 9; i += 2) scanf("%d",b[8]+i);
        for(i = 1; i < 9; i += 2){
            b[8][i] = (b[6][i-1] - b[8][i-1] - b[8][i+1])>>1;
        }
        for(i = 8; i--;){
            for(j = 0; j <= i; j++){
                b[i][j] = b[i+1][j] + b[i+1][j+1];
            }
        }
        for(i = 0; i < 9; i++){
            for(j = 0; j <= i; j++){
                printf("%d%c",b[i][j],j==i?'
':' ');
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/jerryRey/p/4964567.html