<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      樹形DP

      鄙人第一次寫博客,觀感不好請見諒(狗頭保命)
      管他什么DP來了做法都一樣
      確定狀態定義->明確子問題->確定狀態轉換方程->找邊界->打表驗證
      樹形其實也就只是在樹上跑DP而已
      一般兩種遍歷順序:
      1.自上而下
      2.自下而上

      今天我們先來討論討論先是第一種情況:以自上而下的順序跑DP
      洛谷P1352 沒有上司的舞會
      這玩意是個經典的樹形dp

      確定狀態定義:

      每個職員要么來要么不來,兩種狀態我們很顯然可以分開來維護:

      f(i,0)為i職員不參加舞會時的最大快樂值
      f(i,1)為i職員來參加舞會時的最大快樂值

      明確子問題

      很顯然,某個職員來不來和他的上司來不來有著直接的關系嘛
      所以說我們可以通過員工節點來維護他的上司節點
      當某位員工的上司不來的時候他可以選擇來或者不來
      但要是上司來了,那這位員工可就不能來了
      所以......

      確定狀態轉化方程

      f(i,1)表示i職員參加舞會的最大值,而他參加了他的下屬就肯定不會再來參加
      所以我們可以得到:

      CodeCogsEqn (1)

      其中一條就出來了!
      那看看該職員不來的情況呢?
      當員工i不來參加時,他的下屬可以選擇來或者不來,而f維護的是最大快樂值
      所以我們可以得到:

      CodeCogsEqn (2)

      好的,這下完整的狀態轉移方程就解決啦!

      確定邊界條件

      開頭也說過,這道題是自下而上的遍歷順序
      我們來好好分析一下
      在確定狀態轉移方程的時候,我們知道了,f(i,0)和f(i,1)都是由他的員工,即他的孩子節點來維護的
      要是某位員工沒孩子(bushi)......
      要是某位員工沒有下屬,即這位員工他是個樹上的葉子節點呢?
      那該員工來參加是的最大快樂值就只能是他自己的快樂值了,可憐的底層社畜......
      綜上,我們可以得到:

      CodeCogsEqn (2)CodeCogsEqn (3)

      CodeCogsEqn (1)CodeCogsEqn (3)

      打表驗證就不呈現出來啦,自己造一組數據手搓結果就行()

      上代碼

      #include<bits/stdc++.h>
      using namespace std;
      //const int MAXN=1003;某人第一遍敲的時候RE原因實錄...眼是真瞎... 
      const int MAXN=6005;
      struct node
      {
      	int fa=0,r=0;
      	bool leaf=0;    //注意初始化
      	vector<int> son;
      }tr[MAXN];
      int n,dp[MAXN][2],vis[MAXN],root;
      void dfs(int v)
      {
      	vis[v]=1;
      	if(tr[v].leaf)
      		return;
      	for(int w=0;w<tr[v].son.size();w++)
      		if(!vis[tr[v].son[w]]) 
      			dfs(tr[v].son[w]);
      	dp[v][1]=tr[v].r;
      	dp[v][0]=0;
      	int child;		//加個中間量讀起代碼來好讀一點() 
      	for(int i=0;i<tr[v].son.size();i++)
      	{
      		child=tr[v].son[i];
      		dp[v][1]+=dp[child][0];
      		dp[v][0]+=max(dp[child][1],dp[child][0]);
      	}
      	return;
      }
      int main()
      {
      	int l,k;
      	cin>>n;
      	for(int i=1;i<=n;i++)
      		cin>>tr[i].r;
      	for(int i=1;i<=n-1;i++)
      	{
      		cin>>l>>k;
      		tr[l].fa=k;
      		tr[k].son.emplace_back(l);
      	}
      	for(int i=1;i<=n;i++)
      	{ 
      		if(tr[i].fa==0)		//查找根節點 
      			root=i;
      		if(tr[i].son.size()==0)
      		{
      			tr[i].leaf=1;
      			dp[i][0]=0;
      			dp[i][1]=tr[i].r;
      		}
      	} 
      	dfs(root);          //從根節點開始遍歷
      	cout<<max(dp[root][0],dp[root][1]);
      	return 0;
      } 
      

      簡潔的結尾

      posted @ 2025-07-26 22:06  Kaos·Abraham  閱讀(32)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩av一区二区高清不卡| 蜜桃av色偷偷av老熟女| 日韩国产精品一区二区av| 深夜视频国产在线观看| 日韩有码av中文字幕| 亚洲第一无码AV无码专区| 日韩深夜免费在线观看| 人人入人人爱| 亚洲中文精品一区二区| 97亚洲色欲色欲综合网| 亚洲av永久无码精品网站| 日本久久精品一区二区三区| 在线天堂最新版资源| 日韩人妻一区中文字幕| 国产精品日韩av在线播放| 亚洲产在线精品亚洲第一站一| 色伦专区97中文字幕| 久久精品熟女亚洲av麻| 国产性一交一乱一伦一色一情 | 国产精品大全中文字幕| 欧美激欧美啪啪片| 丰满妇女强制高潮18xxxx| 夜夜嗨久久人成在日日夜夜| 99精品热在线在线观看视| 波多野结衣无内裤护士| 日韩精品一区二区蜜臀av| 拍摄av现场失控高潮数次| 久久亚洲精品成人综合网| 女女互揉吃奶揉到高潮视频| 国产色a在线观看| 中文字幕国产精品资源| 政和县| 国产国语毛片在线看国产| 国产精品无码免费播放| 国产精一区二区黑人巨大| 综合偷自拍亚洲乱中文字幕 | 亚洲色成人网站www永久四虎| 成人特黄A级毛片免费视频| 亚洲欧美牲交| 国产极品尤物粉嫩在线观看| 亚洲gv猛男gv无码男同|