[2017纪中10-26]摘Galo 树型背包
2017-10-26 16:19
316 查看
题面
裸的树型背包。f[i][j]表示i的子树中选了j个的最优值。
O(n*k^2)+常数优化代码:
O(n*k)DFS序做法:
裸的树型背包。f[i][j]表示i的子树中选了j个的最优值。
O(n*k^2)+常数优化代码:
#include<iostream> #include<cstdio> #define chkmax(a,b) a=max(a,b) #define ll long long using namespace std; const int maxn=100010; int n,k,w[maxn],sz[maxn]; ll f[10010][1010]; struct edge { int t; edge *next; }*con[maxn]; void ins(int x,int y) { edge *p=new edge; p->t=y; p->next=con[x]; con[x]=p; } void dp(int v) { for(int i=k+1;i>0;i--) f[v][i]=-1e18; for(edge *p=con[v];p;p=p->next) { dp(p->t); sz[v]+=sz[p->t]; for(int i=min(sz[v],k+1);i>=0;i--) for(int j=0;j<=min(i,sz[p->t]);j++) chkmax(f[v][i],f[v][i-j]+f[p->t][j]); } if(con[v]==NULL) sz[v]=1; chkmax(f[v][1],(ll)w[v]); } int main() { scanf("%d%d",&n,&k); 4000 for(int i=2;i<=n;i++) { int fa; scanf("%d%d",&fa,&w[i]); ins(fa,i); } dp(1); ll ans=0; for(int i=0;i<=k+1;i++) chkmax(ans,f[1][i]); printf("%lld",ans); return 0; }
O(n*k)DFS序做法:
#include<iostream> #include<cstdio> #define chkmax(a,b) a=max(a,b) #define ll long long using namespace std; const int maxn=100010; int n,k,w[maxn],sz[maxn],tim,dfn[maxn]; ll f[10010][1010]; struct edge { int t; edge *next; }*con[maxn]; void ins(int x,int y) { edge *p=new edge; p->t=y; p->next=con[x]; con[x]=p; } void dfs(int v) { dfn[++tim]=v; sz[v]=1; for(edge *p=con[v];p;p=p->next) { dfs(p->t); sz[v]+=sz[p->t]; } } int main() { scanf("%d%d",&n,&k);k++; for(int i=2;i<=n;i++) { int fa; scanf("%d%d",&fa,&w[i]); ins(fa,i); } dfs(1); for(int i=n;i>=1;i--) for(int j=1;j<=k;j++) f[dfn[i]][j]=max(f[dfn[i+sz[dfn[i]]]][j-1]+w[dfn[i]],f[dfn[i+1]][j]); ll ans=0; for(int i=0;i<=k;i++) chkmax(ans,f[dfn[1]][i]); printf("%lld",ans); return 0; }
相关文章推荐
- [2017纪中10-26]数论 结论题
- [2017纪中10-24]筹备计划 线段树
- [2017纪中10-25]嘟噜噜 约瑟夫问题 递推
- 燃油附加费的票据能改小一点吗? [10-26]
- hdu5410(2015多校10)--CRB and His Birthday(背包问题)
- 10 11 26 困
- java生成不重复的随机数【某个范围0-10】或者【某个数组int[1,3,56,14,26,22,17]】
- 我的第一个jquery插件:26+10模拟键盘
- 2016 10 26考试 NOIP模拟赛 杂题
- [2017纪中10-25]天才绅士少女助手克里斯蒂娜 线段树
- 欢迎来怼——第14次Scrum会议(10/26)
- 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null
- oracle 11g 学习笔记 10_26
- 2015.03.13,外语,读书笔记-《Word Power Made Easy》 10 “如何讨论交谈习惯”学习笔记 SESSION 26
- 蓝懿iOS 技术内容和心得 10。26
- [2017纪中10-25]凤凰院修真 LCIS最长公共上升子序列
- 2017 - 10 -26 IO流 斐波那契数列 字节流 缓冲字节
- hdu 5410 CRB and His Birthday 背包问题 2015 Multi-University Training Contest 10
- 10-26
- oracle 11g 学习笔记 10_26