NOTE: This problem statement contains images that may not display properly if viewed outside of the applet. You want to build a graph consisting of N nodes and N-1 edges. The graph must be connected. That is, for each pair of nodes there must be some sequence of edges that connects them. For example, the following picture shows a connected graph with N=5 nodes (dots) and N-1=4 edges (lines connecting pairs of dots): ![]() An edge is adjacent to the two nodes that it connects. The degree of a node in the graph is equal to the number of edges adjacent to the node. For example, the degree of node A in the picture above is 3, while the degree of node B is 1. Note that in your graph the degree of each node will be between 1 and N-1, inclusive. You are given a vector <int> scores with N-1 elements. The score of a node with degree d is scores[d-1]. The score of a graph is the sum of the scores of its nodes. Your method should compute and return the maximum possible score for a graph you can construct. | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Notes | |||||||||||||
- | In your solution, the number of nodes N in your graph can be determined as one plus the length of scores. | ||||||||||||
- | In your graph, there must be at most one edge connecting any pair of nodes, and an edge cannot connect a node with itself. | ||||||||||||
Constraints | |||||||||||||
- | scores will contain between 1 and 50 elements, inclusive. | ||||||||||||
- | Each element in scores will be between 0 and 10,000, inclusive. | ||||||||||||
Examples | |||||||||||||
0) | |||||||||||||
| |||||||||||||
1) | |||||||||||||
| |||||||||||||
2) | |||||||||||||
| |||||||||||||
3) | |||||||||||||
| |||||||||||||
4) | |||||||||||||
|
I-Forgot-The-Name Lemma: The total degree of all nodes in a tree with N nodes is 2*N - 2.
To see this, it has N-1 edges. Each edge has 2 adjacent nodes. So, each edge adds exactly 2 to the sum of all degrees of the nodes in the graph. Hence, the total degree is 2 * (number of edges) = 2 * (N-1) = 2*N - 2.
Degree Bound Lemma:The degree of each node in a tree is at least 1 and at most N-1
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int dp[150][150];//dp[i][j]表示用i个节点产生度为j的最大值
class P8XGraphBuilder{
public:
int Max(int a,int b){
if(a<b)return b;
return a;
}
int solve(vector <int> scores)
{
int i,j,k;
int n=scores.size();
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(i=1;i<=n+1;i++)
for(j=0;j<=2*n;j++)
if(dp[i-1][j]!=-1)
{
for(k=1;k<=n&& j+k<=2*n;k++)
{
dp[i][j+k]=Max(dp[i][j+k],dp[i-1][j]+scores[k-1]);
}
}
return dp[n+1][2*n];
}
};