NOIP2017模擬9 3A組 摘果子

2021-08-07 17:16:37 字數 1148 閱讀 1058

7 3就是樹上揹包問題,有乙個很經典的做法

按照dfs序反著來dp,那麼f[i][j]表示的就是dfs序為i的點,受了j的毒的值

如果i這個點選,那麼f[i][j]可以從f[i+1][j-p[i]]轉移過來

否則可以從f[跨過i這個子樹的下乙個值][j]轉移過來

為什麼是正確的呢?

顯然只選子樹或只選兄弟是正確的

但是又要選子樹又要選兄弟呢?

會發現到我子樹的dfs最大的乙個點的時候,它會將它+1的位置轉移過來,也就是把兄弟轉移了過來

那麼又選子樹又選兄弟就包含在選子樹中了

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fd(i,a,b) for(int i=a;i>=b;i--)

#define n 20100

using namespace std;

int n,m,a[n],b[n],f[4050][4050],last[n],next[n],to[n],tot=0,dfn[n],ls[n],c[n];

void putin(int x,int y)

void dg(int x)

ls[x]=tot;

}int main()

tot=0;

dg(1);

fd(i,n,1)

}int ans=0;

fo(i,0,m) ans=max(ans,f[1][i]);

printf("%d",ans);

}

NOIP2017模擬 鴨舌

題目 小美喜歡吃鴨舌。有乙個 n 個點的樹,每個節點 i 第 i 個點上有 ai 個鴨舌。小美一開始處於 x 號點。每次小美可以選擇乙個與現在的點有邊的點而且那個點還有鴨舌,那麼小美會走到那個點並吃乙個鴨舌。要保證小美最後還是走到 x 號點。問小美最多能吃幾個鴨舌?輸入格式 輸入第一行乙個整數 n ...

NOIP2017模擬 區間

2017.11.3 t1 2032 樣例資料 輸入3 2 1 2 1 1 2 4 5輸出 2 6分析 這道題為什麼要放在t1 考得我懷疑人生。本來也只會暴力找,對於30 的資料我是這樣的 先離散化,再二維陣列記錄所有顏色的在每個位置的字首和,然後四層迴圈暴力查詢。而正解是 先離散化,再把每種顏色的每...

NOIP2017提高A組模擬9 17 組合數問題

定義 組合數 s n,m 代表將n 個不同的元素拆分成m 個非空集合的方案數 舉個例子,將拆分成2 個集合有 三種拆分方法 小貓想知道,如果給定n,m 和k,對於所有的0 i n,0 j min i,m 有多少對 i,j 滿足s i,j 是k 的倍數 注意,0 也是k 的倍數,s 0,0 1,對於i...