題意: 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。
問如何邀請使得總歡樂值最大。
dp[i][1] 表示選擇i點 dp[i][0]表示不選擇i點
#include #include #include #include using namespace std;
const int maxn = 6005;
int n;
int w[maxn],dp[maxn][2];
bool vis[maxn];
vectortree[maxn];
int max( int a,int b )
void dfs( int u ) }}
void init()
}int main()
while( scanf("%d%d",&a,&b),a+b )
dfs(1); //由於建的是無向圖,可以任意找個點當樹根進行dp 但是在搜尋中要判重,加個vis陣列
printf("%d\n",max( dp[1][0], dp[1][1] ) );
} return 0;
}
HDU1520 樹形dp入門)
解題思路 設dp i 0 表示 當前這個點不選,dp i 1 表示當前這個點選擇的最優解。轉移方程 dp cur 0 max dp son 1 dp son 0 當前這個點不選,那他的孩子可選可不選,取 最大的。dp cur 1 dp son 0 當前這點選擇,那他的孩子就不能選擇。include ...
hdu1520樹形dp入門
題目鏈結 題意 要開派對,邀請了上司就不能邀請他的下屬,邀請了下屬就不能邀請他的上司,每個人有乙個值,求邀請的人的總值最大 第一行給出乙個數n,代表有n個人。下面n行分別給出n個人的的值 再下面n行每行給出l,k k是l的上司 以0 0結束一組輸入 樹形dp 把每個人看成乙個點,則該點有兩個狀態 邀...
hdu 1520 樹形DP基礎
父節點和子節點不能同時選。首先是建樹,這個在之前的樹形揹包裡有講 因為這裡沒有指定根節點,所以可以建雙向邊,這樣就可以從任乙個點出發遍歷 接下來是dp,狀態轉移方程 dp fa 0 max dp son 0 dp son 1 dp fa 1 dp son 0 include include incl...