Partial Tree
You find a partial tree on the way home. This tree has n
nodes but lacks of n−1
edges. You want to complete this tree by adding n−1
edges. There must be exactly one path between any two nodes after adding. As you know, there are nn−2
ways to complete this tree, and you want to make the completed tree as cool as possible. The coolness of a tree is the sum of coolness of its nodes. The coolness of a node is f(d)
, where f
is a predefined function and d
is the degree of this node. What's the maximum coolness of the completed tree?
indicating the total number of test cases.
Each test case starts with an integer n
in one line,
then one line with n−1
integers f(1),f(2),…,f(n−1)
.
1≤T≤2015
2≤n≤2015
0≤f(i)≤10000
There are at most 10
test cases with n>100
.
3
2 1
4
5 1 4
19
#include<cstdio>
using namespace std ;
#define inf 1000000
int main(){
int dp[],a,b,n,i,T,j;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&a);
for( i=;i<n;i++){dp[i]=-inf;}
for( i=;i<n;i++){
scanf("%d",&b);b=b-a;
for( j=i-;j<=n-;j++){
if(dp[j-(i-)]+b>dp[j])
dp[j]=dp[j-(i-)]+b;
}
}
printf("%d\n",n*a+dp[n-]);
}
return ;
}
代码