8.26总结
分数
| T1 | T2 | T3 | T4 | T5 | T6 | 总分 |
|---|---|---|---|---|---|---|
| 100pts | 100pts | 12pts | 100pts | 60pts | 14pts | 386 |
T3
考试时没想好,随手打了一个树形DP,喜提12分。
正解:
定义状态dp[i][j]表示以i为根的子树,保留j个节点拆掉的最小边数
答案:
int ans=dp[1][p]
for(int i=2;i<=n;i++){
ans=max(ans,dp[i][p]+1)//因为只有1节点不用切断与父亲的道路,其他点都要切断一条与他的父节点的道路
}
初始化: dp[i][1]=vt[i].size() 一开始的点都是不连儿子只连父亲
转移方程:dp[x][j]=min(dp[x][j],dp[x][j-k]+dp[v][k]-1),就是一个基本的背包类树形DP
T5
拓扑的DP方程写错位置,喜提60分
其实就是一个拓扑+递推
dp[i]表示第i个点挤奶的最早时间
每次删边的时候更新dp
dp[v]=max(dp[v],dp[x]+w)
因为v是从x过了w的时间后才能挤奶
初始状态:
dp[i]=s[i]
不能早于s[i]的时间
T6
考时没写出来,但正解应该是BFS+Dij
先用多起点BFS求出每个点是安全还是不安全的,以安全和不安全花费的钱的数量建边,跑Dij即可。
本人(KK_SpongeBob)蒟蒻,写不出好文章,但转载请注明原文链接:https://www.cnblogs.com/OIer-QAQ/p/18575250

浙公网安备 33010602011771号