POJ 1192 最優連通子集 動態規劃

2022-05-28 07:39:09 字數 850 閱讀 8676

題意:簡單點說就是給定一棵樹,每個節點都有乙個權值,現在要求求出這棵樹的乙個聯通的一枝使其權值最大。

解法:設sum[i]為包含i節點在內的一枝的最大權值和,那麼sum[i] = val[i] + max(0, sum[j])其中(i,j)之間存在邊。當sum[j]為負數時,對父親節點的貢獻就為0了。

**如下:

#include #include 

#include

#include

#include

using

namespace

std;

int n, sum[1005

];char g[1005][1005

];char vis[1005

];struct

point e[

1005

];bool point::judge(const point & t) const

return

false;}

void

build()

}

}}int dfs(int x)

}//如果包含該節點的權值總和大於0則返回該值,否則乾脆剪掉下面這一枝

return sum[x] > 0 ? sum[x] : 0;}

intmain()

build();

dfs(0);

int max = sum[0

];

for (int i = 1; i < n; ++i)

printf(

"%d\n

", max);

}return0;

}

POJ 1192最優連通子集

最優連通子集 題目的描述太繁瑣了。其實意思簡單,就是給定若干個點,如果兩個點之間的曼哈頓距離小於1,就連邊。然後就構成一顆樹,然後每個點都 有乙個權值,然後選取若干個點,使得權值和最大,並且點與點之前都連通。簡單的樹形dp,dp i 表示以i點為根的子樹並且選取i點時的最大權值。方程就很好寫,dp ...

poj 1192 最優連通子集 (樹形dp)

設dp u 0 為以u為根的子樹,子集中沒有u的最大權值,dp u 1 則表示子集中有u。如果子集中沒有u,那麼u的所有兒子中只能選乙個。如果子集中有u,那麼u的所有兒子要麼不選,要麼必須在子集中。狀態轉移方程 dp u 0 max dp u 0 max dp v 0 dp v 1 dp u 1 m...

POJ 1192 最優連通子集 詳解樹形DP

題目描述 color blue size medium b align center 最優連通子集 align b size color color blue b description b color 眾所周知,我們可以通過直角座標系把平面上的任何乙個點p用乙個有序數對 x,y 來唯一表示,如果x...