構造 n 個節點的樹,f[i] 表示度數(入度+出度)為 i 的節點權值。求樹的最大總權值。
dp[j] = max(dp[j], dp[j-i] + f[i+1] - f[1]),最終答案 dp[n-2] + n*f[1]。代碼中直接用 f[i+1] 作為物品價值,初始 dp[0]=0,最後加上基礎權值 n*f[1](或直接累加)。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[2020], dp[4050];
int main() {
int T; scanf("%d", &T);
while (T--) {
int n; scanf("%d", &n);
for (int i=1;i