首页 > 代码库 > codevs 访问艺术馆
codevs 访问艺术馆
/* codevs 1163 访问艺术馆 红果果的树形dp*/#include<iostream>#include<cstdio>#include<cstring>#define maxn 210using namespace std;int n,m,lc[maxn],rc[maxn],g[maxn][2],T,v[maxn],f[maxn][maxn*6],x,y;struct node{ int v,t,pre;}e[maxn*2];void dfs(int now,int val){ if(val){ v[now]=val;return; } scanf("%d%d",&x,&y); lc[now]=++n;g[now][0]=x;dfs(n,y); scanf("%d%d",&x,&y); rc[now]=++n;g[now][1]=x;dfs(n,y);}void Dfs(int x){ if(lc[x]==0&&rc[x]==0){ for(int i=1;i<=T;i++) f[x][i]=min(i/5,v[x]); return; } Dfs(lc[x]);Dfs(rc[x]); for(int i=0;i<=T;i++) for(int j=0;j<=i;j++){ int s=0; if(j>=2*g[x][0])s+=f[lc[x]][j-2*g[x][0]]; if(i-j>=2*g[x][1])s+=f[rc[x]][i-j-2*g[x][1]]; f[x][i]=max(f[x][i],s); }}int main(){ scanf("%d",&T);/*T-- 尼玛理解错了*/ scanf("%d%d",&x,&y); T-=x*2;if(!y)dfs(++n,0); Dfs(1); printf("%d\n",f[1][T]); return 0;}
codevs 访问艺术馆
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。