luogu1040 加分二叉樹

2021-09-13 23:37:34 字數 868 閱讀 3731

題目傳送門

這道題一看題目就大概知道是一道樹狀dp,我們就要想轉移方程式是個什麼樣子了。

首先我們很好能想出來要從下往上不斷轉移狀態,所以我們要先預處理出來dp[

i][i

]=a[

i]

dp[i][i]=a[i]

dp[i][

i]=a

[i],然後不斷轉移。

然後轉移方程該怎麼想呢?方程很明顯就是看看怎麼分答案最大就好了,但是要注意一點要記錄你怎麼分的,最後輸出一下就好了。

:dp[i][j]=max(dp[i][k-1]*dp[k+1][j]+a[k])

#include

#include

#include

#include

using

namespace std;

int a[90]

;int ans[90]

[90];

int dp[90]

[90];

void

erfen

(int l,

int r)

printf

("%d "

,ans[l]

[r])

;erfen

(l,ans[l]

[r]-1)

;erfen

(ans[l]

[r]+

1,r);}

intmain()

printf

("%d\n"

,dp[1]

[n])

;erfen(1

,n);

return0;

}

luogu1040 區間DP 加分二叉樹

description 設乙個n個節點的二叉樹tree的中序遍歷為 l,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第j個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子...

洛谷1040 加分二叉樹

題目描述 設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 su...

P1040 加分二叉樹

設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 subtree...