View Code of Problem 3834

#include<string>
#include<cstring>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<vector>
#include<cstring>
using namespace std;

int mat[100][100];

int cal(int m, int n) {
	int i, j;

	if (n == 0 || m == n)
		return 1;
	// // 一行一行的计算下去
	//    for(i = 1; i <= m; i++) { // m一般不能为0
	//        for(j = 0; j <= i && j <= n; j++) { // 当i大于n的时候不用计算,即不用计算n列候的数,节省时间
	//            if(j == 0 || j == i)
	//                mat[i][j] = 1;
	//            else
	//                mat[i][j] = mat[i-1][j-1] + mat[i-1][j];
	//        }
	//    }
		// 一列一列的计算下去
	for (j = 0; j <= n; j++) { // 只要计算n列就行了,不用计算后面的
		mat[j][j] = 1;
		for (i = j + 1; i <= m; i++) {
			if (j == 0)
				mat[i][j] = 1;
			else
				mat[i][j] = mat[i - 1][j - 1] + mat[i - 1][j];
		} // 计算Cmn
	}
	return mat[m][n];
}
int main()
{
	int n;
	while (cin >> n)
	{
		int z = 0;
		long long sum = 0;
		while (z <= n)
		{
			long long q = pow(2, n - z)*cal(n, z);
			cout << q << " ";
			sum += q;
			z += 2;
		}
		cout << sum << endl;
	}
}

Double click to view unformatted code.


Back to problem 3834