已知二叉樹中序遍歷序列,求所有可行樹中的某種狀態最優解。
二叉樹中序遍歷性質:1.遍歷順序:左節點->根->右節點。2.序列最後乙個元素與深度遍歷(二叉樹前序遍歷)時的最後乙個元素相同3.同乙個子樹的遍歷順序是乙個連續序列,此序列中的某個點都可能是該子樹的根節點
dp[i][j]:[i,j]序列中的最優解。根據性質3,必須列舉所有可能的子節點。pre[i][j]:[i,j]序列子樹的根節點是k
dp[i][j]=max pre[i][j]=k
#include#include#include#include#include#include#include#define ll long long
#define sf scanf
#define pf printf
#define maxn 50
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&(-x)
const ll mod=1000000007;
using namespace std;
int n,w[maxn],pre[maxn][maxn],dp[maxn][maxn];
void print(int i,int j)
int main()}}
}printf("%d\n",dp[1][n]);
print(1,n);
printf("\n");
}
479 加分二叉樹
原題傳送門 設乙個n個節點的二叉樹tree的中序遍歷為 1,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 s...
加分二叉樹
描述 設乙個n個節點的二叉樹tree的中序遍歷為 l,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 subt...
加分二叉樹
設乙個n個節點的二叉樹tree的中序遍歷為 l,2,3,n 其中數字1,2,3,n為節點編號。每個節點都有乙個分數 均為正整數 記第i個節點的分數為di,tree及它的每個子樹都有乙個加分,任一棵子樹subtree 也包含tree本身 的加分計算方法如下 subtree的左子樹的加分 subtree...