B. Bright, Nice, Brilliant codeforces 1734B

Problem - 1734B - Codeforces

题目大意:有一个n层的金字塔,第i层有i个房间,第i层的第j个房间(i,j)到(i+1,j)和(i+1,j+1)有通路,可以在任意个房间里插上火把,每个房间的亮度等于能到达该房间的有火把的房间的数量和,要求每一层的所有房间亮度相同,且最左端的房间的亮度和最大,要求输出火把的摆放,按照梯形的形式输出,房间里有火把输出1,没有输出0

思路:因为要最左端的房间的亮度和最大,且只有最左端的房间能到最左端的房间,所以先让最左端的房间都插上火把,这样亮度和一定最大,当前每个房间的亮度为i-(j-1),要让每一层的房间亮度相同就需要使得这个亮度与j无关,通过观察可以发现每个房间都有j-1个最右端的房间可以到达,所以我们在最右端的每个房间都插上火把,这样每个房间都能接收到i-(j-1)个最左端和j-1个最右端的房间的亮度,每个房间的亮度就等于层数i

#include
#include
using namespace std;
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		scanf_s("%d", &n);
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= i; j++)
			{
				if (j == 1 || j == i)
				{//在最左端和最右端的房间插上火把
					printf("1 ");
				}
				else
				{
					printf("0 ");
				}
			}
			printf("\n");
		}
	}
	return 0;
}

你可能感兴趣的:(贪心,蓝桥杯,c++)