poj 1192(簡單樹形dp)

2021-07-11 03:17:46 字數 637 閱讀 5459

題意:這題描述看似很複雜, 其實讀懂後就是乙個相鄰點之間連通問題,水題。

解題思路:首先把相鄰的點連線起來建立一棵樹,dp[i][0]表示不選擇i節點可以得到的最大價值,dp[i][1]表示選擇i節點可以得到的最大價值。狀態方程很簡單,詳見**。

#include#include#include#includeusing namespace std;

const int maxn = 1001;

struct edge

edge[maxn<<1];

struct node

point[maxn];

int n,cnt,pre[maxn],dp[maxn][2]; //dp[i][0]表示不選i節點,dp[i][1]表示選i節點

void addedge(int u,int v)

void dfsdp(int u,int fa)

dp[u][0] = max(dp[u][0],tmp); //考慮u的所有子節點都不選

}int main()

dfsdp(1,0);

printf("%d\n",max(dp[1][0],dp[1][1]));

} return 0;

}

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...

POJ 1192最優連通子集

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