題目描述
網上出現了一種高科技產品——人品測試器。只要你把你的真實姓名輸入進去,系統將自動輸出你的人品指數。把兒不相信自己的人品為0。經過了許多研究後,把兒得出了乙個更為科學的人品計算方法。這種方法的理論依據是乙個非常重要的結論:人品具有遺傳性。因此,乙個人的人品完全由他的祖先決定。把兒提出的人品計算方法相當簡單,只需要將測試物件的k個祖先的人品指數(可能為負數)加起來即可。選擇哪k個祖先可以由測試者自己決定,但必須要滿足這個要求:如果除自己的父母之外的某個祖先被選了,那麼他的下一代必需要選(不允許跳過某一代選擇更遠的祖先,否則將失去遺傳的意義)。
非常不幸的是,把兒測試了若干次,他的人品值仍然不能為乙個正數。現在把兒需要你幫助他找到選擇祖先的最優方案,使得他的人品值最大。
輸入資料的第一行是兩個用空格隔開的正整數n和k,其中n代表把兒已知的家譜中共有多少人(包括把兒本身在內),k的意義參見問題描述。
資料的第二行有n-1個用空格隔開的整數(可能為負),這些數的絕對值在2^15以內。其中,第i個數表示編號為i+1的人的人品值。我們規定,編號為1的人是把兒。
接下來n行每行有兩個用空格隔開的數,其中第i行的兩個數分別表示第i個人的父親和母親的編號。如果某個人的父親或母親不在這個家譜內,則在表示他的父親或母親的編號時用0代替。
輸入資料中除把兒以外的所有人都是把兒的祖先,他們都會在輸入資料中作為父親或母親被描述到。輸入資料中每個人都不可能同時作為多個人的父親或者是母親。
輸出將把兒能夠得到的最大人品值輸出
樣例輸入 copy
6 3
-2 3 -2 3 -1
2 34 5
0 60 0
0 00 0
樣例輸出 copy4
提示
樣例說明
下圖顯示了輸入資料所描述的家譜圖。括號裡的數表示的是該人的人品值。
4(-2) 5(3) 6(-1)
2(-2) 3(3)
1 <—把兒
顯然,選擇祖先2、3、5能使把兒的人品值達到最大。這個最大值為4
資料規模
對於50%的資料,n<=10;
對於100%的資料,n<=100。
思路:樹形dp。
#pragma comment(linker, "/stack:1024000000,1024000000")
#pragma gcc optimize(3,"ofast","inline")
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define rep(i , a , b) for(register int i=(a);i<=(b);i++)
#define per(i , a , b) for(register int i=(a);i>=(b);i--)
#define ms(s) memset(s, 0, sizeof(s))
#define squ(x) (x)*(x)
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef pairpi;
typedef unordered_mapun_map;
typedef priority_queueprque;
templateinline void read (t &x)
while (c >= '0' && c <= '9')
x = x * sign;
}const int maxn = 2e5 + 10;
const int inf = 0x3f3f3f3f;
const ll inf = ll(1e18);
const int mod = 998244353;
const double pi = acos(-1);
//#define local
int n,k;
int fa[111][2];
int a[111];
int dp[111][111];
bool vis[111][111];
int dfs(int x,int cnt)
vis[x][cnt]=1;
return dp[x][cnt]=ans;
}int main(int argc, char * ar**)
rep(i,1,n)
int ans = dfs(1,k+1);
printf("%d\n",ans);
return 0;
}
jzoj 3914 人品問題 樹形DP
description 網上出現了一種高科技產品 人品測試器。只要你把你的真實姓名輸入進去,系統將自動輸出你的人品指數。yzx不相信自己的人品為0。經過了許多研究後,yzx得出了乙個更為科學的人品計算方法。這種方法的理論依據是乙個非常重要的結論 人品具有遺傳性。因此,乙個人的人品完全由他的祖先決定。...
JZOJ3914 人品問題 樹形DP
選擇乙個結點當且僅當選擇他的父親。求選擇m m個結點的最大價值。看到這道題立馬想到方程。很好,o n 3 o n3 肯定會tt飛。看看資料,嗯n 100n 1 00。設f x k 表示在以結點x為根的子數中選擇k個結點的最大價值 那麼當這棵樹沒有子節點時,僅有f x 1 a x 其它全部是inf 當...
樹形dp(人品問題NOIP17提高模擬訓練3)
網上出現了一種高科技產品 人品測試器。只要你把你的真實姓名輸入進去,系統將自動輸出你的人品指數。把兒不相信自己的人品為0。經過了許多研究後,把兒得出了乙個更為科學的人品計算方法。這種方法的理論依據是乙個非常重要的結論 人品具有遺傳性。因此,乙個人的人品完全由他的祖先決定。把兒提出的人品計算方法相當簡...