给定任务是构造一个具有给定整数N的树,使得所有有序对(x,y)的度(x)*度(y)的总和最大且x不等于y。
输入−N = 5
输出−50
说明
1 \ 2 \ 3 \ 4 \ 5 Degree of 1st node = 1 Degree of 2nd node = 2 Degree of 3rd node = 2 Degree of 4th node = 2 Degree of 5th node = 1
所有有序对(x,y)的所有度数的乘积-
1st node = 1*2 + 1*2 + 1*2 + 1*1 = 7 2nd node = 2*1 + 2*2 + 2*2 + 2*1 = 12 3rd node = 2*1 + 2*2 + 2*2 + 2*1 = 12 4th node = 2*1 + 2*2 + 2*2 + 2*1 = 12 5th node = 1*2 + 1*2 + 1*2 + 1*1 = 7 Total sum = 50
输入−N = 7
输出−122
一棵树中所有节点的度数总和为−(2 * N)–2。这里N =树中的节点数。为了使总和最大化,必须最小化叶节点的数量。
内部Max()
函数初始化int sum = 0并创建具有条件x <N和y <N的初始化x = 1和y = 1的嵌套循环。
在嵌套循环内,首先检查if(x == y),如果是,则添加continue;声明
否则,初始化int degree = 2并使用if语句检查if(x == 1 || x == n)。如果是这样,则将degreeX = 1。然后初始化int degree = 2并对变量y进行相同的操作
最后,在关闭循环之前,通过写-sum =(degreeX + degreeY)更新sum变量。
#include <bits/stdc++.h> using namespace std; int Max(int N){ int sum = 0; for (int x = 1; x <= N; x++){ for (int y = 1; y <= N; y++){ if (x == y) continue; //节点x的初始化程度为2- int degreeX = 2; //如果x是叶节点或根节点 if (x == 1 || x == N) degreeX = 1; //节点y的初始化度为2- int degreeY = 2; //如果y是叶节点或根节点 if (y == 1 || y == N) degreeY = 1; //更新总和 sum += (degreeX * degreeY); } } return sum; } //主要功能 int main(){ int N = 5; cout << Max(N); }
输出结果
如果运行上面的代码,我们将获得以下输出-
50