没有上司的舞会——树状DP 入门题,真的比想象中简单许多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有上司的舞会——树状DP 入门题,真的比想象中简单许多相关的知识,希望对你有一定的参考价值。
本来线性DP 都不怎么有信心,可以说学得非常差,于是下意识地觉得树状的肯定超过了我的理解能力,然后做这题的时候就直接翻了题解,哪知道这么简单……简直比01 背包还好理解啊,看来以后不能总是看到算法标签就退避了。
1 #include<iostream> 2 #include<cstdio> 3 #include<vector> 4 using namespace std; 5 const int N=10086; 6 int n,val[N]; 7 int f[N][4]; 8 bool rtn[N]; 9 vector<int> gr[N]; 10 11 void dfs(int x){ 12 f[x][1]=val[x]; 13 for(int i=0;i<gr[x].size();i++){ 14 dfs(gr[x][i]); 15 f[x][0]+=max(f[gr[x][i]][0],f[gr[x][i]][1]); 16 f[x][1]+=f[gr[x][i]][0]; 17 } 18 19 } 20 21 int main(){ 22 cin>>n; 23 for(int i=1;i<=n;i++)cin>>val[i]; 24 int xxx,yyy; 25 while(cin>>xxx>>yyy&&xxx&&yyy){gr[yyy].push_back(xxx);rtn[xxx]=true;} 26 27 for(int i=1;i<=n;i++) 28 if(!rtn[i]){ 29 dfs(i); 30 cout<<max(f[i][0],f[i][1])<<endl; 31 break; 32 } 33 return 0; 34 }
CodeVS 22ms
以上是关于没有上司的舞会——树状DP 入门题,真的比想象中简单许多的主要内容,如果未能解决你的问题,请参考以下文章