```cpp
#include <bits/stdc++.h>
#define N 10005
using namespace std;
struct tree{
int l,r,tm,w;
tree()
{
l=r=-1;
}
}t[N];
int TIME,num,dp[N][N]={0},fa[N];
void plant(int n,int status)
{
int p,now;
num++;
scanf("%d%d",&t[num].tm,&t[num].w);
t[num].tm*=2;
if(status==0) t[n].l=num,fa[num]=n;
else if(status==1) t[n].r=num;
now=num;
if(t[now].w==0)
{
plant(now,0);
plant(now,1);
}
return;
}
int dfs(int x,int time)
{
time-=t[x].tm;
if(x==-1|| time<=0) return 0;
if(dp[x][time]>0) return dp[x][time];
//cout<<x<<endl;
for(int i=0;i<=time;i++)
{
int u=dfs(t[x].l,i);
int v=dfs(t[x].r,time-i);
//cout<<x<<" "<<u<<" "<<v<<endl;
if(u+v+t[x].w>dp[x][time]&&time-t[x].w*5>=0) dp[x][time]=u+v+t[x].w;
}
return dp[x][time];
}
int main()
{
freopen("gallery.in","r",stdin);
freopen("gallery.out","w",stdout);
scanf("%d",&TIME);
num=0;
plant(1,0);
cout<<dfs(1,TIME-1);
/*for(int i=1;i<=num;i++)
{
cout<<i<<" "<<t[i].tm<<" "<<t[i].w<<endl;
if(t[i].l>-1) cout<<"l:"<<t[i].l<<" ";
if(t[i].r>-1) cout<<"r:"<<t[i].r<<endl;
}*/
return 0;
}
```
by pip202513 @ 2023-07-13 09:46:07
ywaq
by ___LOSER___ @ 2023-07-13 09:47:50
75(记忆话搜索)
```cpp
#include <bits/stdc++.h>
#define N 10005
using namespace std;
struct tree{
int l,r,tm,w;
tree()
{
l=r=-1;
}
}t[N];
int TIME,num,dp[N][N]={0},fa[N];
void plant(int n,int status)
{
int p,now;
num++;
scanf("%d%d",&t[num].tm,&t[num].w);
t[num].tm*=2;
if(status==0) t[n].l=num,fa[num]=n;
else if(status==1) t[n].r=num;
now=num;
if(t[now].w==0)
{
plant(now,0);
plant(now,1);
}
return;
}
int dfs(int x,int time)
{
time-=t[x].tm;
if(x==-1|| time<=0) return 0;
if(dp[x][time]>0) return dp[x][time];
//cout<<x<<endl;
for(int i=0;i<=time;i++)
{
int u=dfs(t[x].l,i);
int v=dfs(t[x].r,time-i);
//cout<<x<<" "<<u<<" "<<v<<endl;
if(u+v+t[x].w>dp[x][time]&&time-t[x].w*5>=0) dp[x][time]=u+v+t[x].w;
}
return dp[x][time];
}
int main()
{
//freopen("gallery.in","r",stdin);
//freopen("gallery.out","w",stdout);
scanf("%d",&TIME);
num=0;
plant(1,0);
cout<<dfs(1,TIME-1);
/*for(int i=1;i<=num;i++)
{
cout<<i<<" "<<t[i].tm<<" "<<t[i].w<<endl;
if(t[i].l>-1) cout<<"l:"<<t[i].l<<" ";
if(t[i].r>-1) cout<<"r:"<<t[i].r<<endl;
}*/
return 0;
}
```
by pip202513 @ 2023-07-13 09:47:57