CSUOJ-1980 不堪重负的数(区间dp)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                CSUOJ-1980 不堪重负的数(区间dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1980: 不堪重負的樹
Submit Page????Summary????Time Limit:?1 Sec?????Memory Limit:?128 Mb?????Submitted:?57?????Solved:?20????
Description
小X非常喜歡樹,然后他生成了一個大森林給自己玩。
玩著玩著,小X陷入了沉思。
- 一棵樹由N個節點組成,編號為i的節點有一個價值Wi。
- 假設從樹根出發前往第i個節點(可能是樹根自己),一共需要經過Di個節點(包括起點和終點),那么這個節點對這棵樹產生的負擔就是Di與Wi的乘積。
- 對于一棵樹而言,這棵樹的負擔值為所有節點對它產生的負擔之和。
小X學習了dfs,如果他知道樹的結構,他當然可以很容易地算出樹的負擔值。可是現在沉思中的小X并不知道樹的結構形態,他只知道一棵二叉樹的中序遍歷以及每個節點的價值,那么這棵二叉樹可能的最小負擔值是多少呢?
Input
第一行為一個正整數T(T≤20)表示數據組數。
每組數據包括三行。
第一行為一個正整數N(N≤200)。
第二行為N個正整數Wi(Wi≤108),表示編號為i的節點的價值。
第三行為N個正整數Pi(Pi≤N),為一個1~N的排列,表示二叉樹的中序遍歷結果。
Output
對于每組數據,輸出一行一個正整數,表示這棵樹可能的最小負擔值。
Sample Input
2 4 1 2 3 4 1 2 3 4 7 1 1 1 1 1 1 1 4 2 3 5 7 1 6Sample Output
18 17Hint
對于第一個樣例,樹根為3,3的左兒子是2,3的右兒子是4,2的左兒子是1,這樣構成的樹可以達到最小負擔。
對于第二個樣例,對應的滿二叉樹可以達到最小負擔。
Source
2017年8月月賽
Author
devember
?
解題思路:重點是理解中序遍歷,先左子樹、然后根節點、然后右子樹。找出狀態轉移方程:dp[i][j] = min(dp[i][k-1]+dp[k+1][j]+a[j]-a[i-1],dp[i][j])然后枚舉斷點k(也就是根)就行。 做完覺得dp.區間dp和dfs還不太會。。所以重新看了下。想起來之前8月月賽這題剛好就是這個還不會。就做了。。。發現算法這東西,主要還是理解他的本質基礎,這樣比較容易掌握。。(雖然我還是菜雞- -) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=205; const long long INF=1e18; long long a[maxn],w[maxn]; long long dp[maxn][maxn];int main() {int t;scanf("%d",&t);while(t--){int n,m;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",&w[i]);}a[0] = 0;memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){scanf("%d",&m);a[i] = a[i-1] + w[m]; //求前綴和dp[i][i] = w[m];}for(int l=2;l<=n;l++){for(int i=1;i+l-1<=n;i++){int j = i+l-1;dp[i][j] = INF;for(int k=i;k<=j;k++)//枚舉根 {long long temp = dp[i][k-1]+dp[k+1][j]+a[j]-a[i-1];if(temp<dp[i][j])dp[i][j] = temp;}}}printf("%lld\n",dp[1][n]);} }?
哎。。前面好多算法都忘了。。當初就理解的不夠透徹。。
轉載于:https://www.cnblogs.com/WWkkk/p/7435684.html
總結
以上是生活随笔為你收集整理的CSUOJ-1980 不堪重负的数(区间dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 笔试准备内容
- 下一篇: 板邓:PHP获取当前页面url地址、参数
